If you have a server hosting Jira and Confluence, what timezone do you set it to? UTC, or the timezone your users are in?
There is a serverfault discussion about this, and on the face of it, the question is why wouldn't you use UTC? Timezones are messy, ugly, human things. Why complicate your nice clean server with them?
In this post I'll outline why I think you should set your server to the timezone of the bulk of your users, rather than nice clean UTC, and specifically why, if you find yourself setting the -Duser.timezone=...
parameter, you're probably making life harder for yourself than necessary.
First, I think we can all agree, log files on the same server should all use the same time zone.
There are at least 3 log-generating things you'll be concerned with:
Events across these often need to be correlated - for instance, a spike in requests (access.log) triggers high server load (operating system), and eventually application errors (atlassian-jira.log). For your debugging sanity, these log files must have the same timezone.
The web server and OS logs are all in the OS timezone, obviously. How about app server logs, atlassian-jira.log and atlassian-confluence.log?
App server log timestamps will also be in the OS timezone, unless you've told Java otherwise by explicitly setting -Duser.timezone
. To spell it out: if you've set -Duser.timezone
, you can no longer correlate datestamps between atlassian-jira.log, access.log and the rest of the system.
So don't do that. Don't ever set -Duser.timezone
. Leave Java in the same timezone as your OS.
There are two arguments against setting your server timezone to UTC.
Users report problems relative to their timezone. Screenshots might be saved with timestamped filenames. "Things got really slow around 4pm" they'll say, and your job is to find what was happening on the server at 4pm.
I work on Linux, and my tooling hasn't evolved much since the 1970s. I don't know an easy way to convert log timestamps from UTC to something else, on the fly. If the log's timezone is that of the user, life is just easier.
The lnav log file utility now reinterprets timestamps using the system timezone and |
"But", our administrator says, "I want UTC on the server for <insert sane, excellent reasons>, and I use <insert names of tool that let me view logs in any timezone, which I shall share with you in the comments>. Why can't the OS and Java be set to UTC, and the apps be told only to display dates in a specific format?"
The answer is that this would be possible, except that Confluence developers failed to implement a default user timezone setting ( ).
To review, the timezone users see in Jira and Confluence comes from one of various levels:
1) User preference | Users can explicitly set their timezone in their profile:
| ||||
---|---|---|---|---|---|
2) Default user preference | If your user preference isn't set, the default user preference will be in effect.
| ||||
3) Java user.timezone | The default user timezone preference inherits its value from the Java | ||||
4) OS timezone | Finally, Java sets its
|
So in Jira, everything is great. You can have atlassian-jira.log
use a timezone that's good for debugging (UTC if that's your preference), while the default timezone used to render dates can be something appropriate for the majority of users.
In Confluence, sadly there is only one default timezone (Java's user.timezone
). It will have to be set to the timezone that makes sense for most users. This means atlassian-confluence.log
will also use that timezone, and for consistency, so should the rest of the OS.
The conclusions are:
-Duser.timezone
as it leads to inconsistent timezones across local log files.