Help! My Audit Journal Is Flooding My System!

IBM i (OS/400, i5/OS)
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

While auditing every possible action and object access is great from a security perspective, reality says that's not going to happen. Carol discusses how to lessen the impact of auditing on your system.

Don't get me wrong. Speaking from a security professional's perspective, the more you audit, the better. Information in the audit journal is invaluable when performing forensics and extremely helpful to the system and security administrators to debug daily issues. But here's where the ideal must meet the practical. The fact of the matter is, the storage capacity on most systems doesn't allow you to turn on every auditing feature and log every object access. So what do you do when you find that your system is filling up with audit journal receivers? This article discusses some options.

What's Your Audit Journal Receiver Retention Period?

One of your first considerations is how long you're keeping audit journal receivers on your system. While regulations such as PCI require that you retain one year of audit information, that doesn't mean your audit journal receivers have to be resident on the system. So how many days' worth do you keep? The answer is, as many as is practical. We have some clients whose systems are so busy that the activity generates 20 - 30 receivers a day. In their case, they can keep only 24 hours' worth of receivers on their systems. We have other clients with two years' worth of audit journal receivers! The average is 1 - 2 weeks. If storage permits, we encourage our clients to retain - at a minimum - four days of audit journal receivers. The idea is that, if something happens on Friday and there's a three-day weekend, you have a chance of having the audit journal receivers on the system, thereby avoiding the need to restore them from backup to research the issue. (While restoring audit journal receivers is possible, it's not what you call a pleasant experience.)

When determining your retention period for audit journal receivers, consider how far back you typically have to go to investigate an issue. I'm not talking about performing a full-on forensic investigation. In this case, I'm referring to a system or security administrator looking through the audit journal for problem determination, such as determining when a profile was created, authority was changed, or a file was deleted. Take that average and add a few days. If you have the space, then that's probably a reasonable retention period. Regardless of your retention period, the key is to ensure you save the receivers using a method that ensures you have a full year's worth of audit journal information (as in 365 days of audit journal receivers) saved.

What Actions Are Being Audited?

Again, from my perspective, I'd prefer that all actions be audited. But again, for many organizations, that's not practical. If you're running out of space due to the proliferation of audit journal receivers, check the actions being audited by running DSPSYSVAL QAUDLVL. If this list includes the value *AUDLVL2, you'll also need to look in the QAUDLVL2 system value. The absolute minimum set of values we recommend for this system value is *AUTFAIL, *CREATE, *DELETE, *SAVRST, *SECCFG, *SECRUN, *SERVICE, and *PTFOPR (new in V7R2.) If that's your current set and you're running out of room, I'd look at saving your journal receivers more often and reducing your retention period.

If either of these system values includes the values of *PRTDTA or *SPLFDTA, which are very useful in debugging issues with printing and spooled files (such as determining who deleted a spooled file), weigh how valuable this type of information is to you. These two values tend to generate a lot of entries.

Another entry that is very helpful but generates tons of entries is the value of *JOBDTA or *JOBBAS (which generates a subset of the entries generated by *JOBDTA). This logs the start/stop/release/hold of every job on the system. On busy systems, this value alone can flood the audit journal. That said, it is important to log the activity of some profiles - QSECOFR, for example. If you're flooding your audit journal, one option you have is to remove *JOBDTA (or *JOBBAS) and, instead, configure this audit action for individual profiles. Use the Change User Auditing (CHGUSRAUD) command to configure actions to audit above and beyond what is specified in the QAUDLVL system value.

Finally, if you're running an application that uses adopted authority to allow users to access application data, adding *PGMADP is generating a lot of entries that are for "normal" activity. Typically, when adding this value, you're trying to detect the abnormal use of adopted authority. If you're depending on adopted authority, detecting what's abnormal is going to be difficult. You may, instead, want to include this value at the user level rather than the system level, adding it to profiles that shouldn't normally be running programs that adopt (developers' profiles, for example).

For a more detailed explanation of the entries each value of QAUDLVL generates, see Chapter 9 of the IBM i Security Reference manual. (Be sure to use the version of the manual that corresponds to your system's OS level.)

What Object Auditing Is Enabled?

The next area to investigate is object auditing. You can configure, on an individual object, that either updates are audited or both reads and updates are audited. Configuring object auditing on selected objects is not usually what's going to flood your audit journal. Some of the High Availability (HA) vendors require that changes to objects be audited. To ensure changes are audited on all objects - even objects that are created after the initial configuration - the QCRTOBJAUD system value is set to *CHANGE. (The default is *NONE.)

Note: This system value sets the object auditing value of newly created objects. While the value of *CHANGE generates a lot of entries, if that's a requirement of your vendor, don't change QCRTOBJAUD unless you consult with them first!

But typically, even setting QCRTOBJAUD to *CHANGE doesn't put systems over the top. What does is setting QCRTOBJAUD to *ALL, which means that all objects - and I do mean all objects - are audited whenever they are updated or read. This means all *USRSPC, *USRIDX, and *DTAARA objects as well as *FILE objects are audited whenever they're read or written to! Auditing the reads of all objects on the system often causes massive numbers of audit journal entries. If your system is running out of room, check the value of QCRTOBJAUD. You may be able to reduce this value to *CHANGE or perhaps *NONE, depending on your vendor or compliance requirements. If you only need to audit a subset of objects, such as objects in a specific library, consider setting the Create Object Auditing value at the library level so that objects created into that specific library inherit its object auditing value. This allows you to set the system value to either *CHANGE or *NONE.


If your system is nearly out of storage, you need to quickly save your audit journal receivers and then delete some. But once the crisis is averted and before you make any changes, I encourage you to examine your security policy, the laws and regulations with which your organization must comply, reports and processes that use information in the audit journal, and any other influences on what needs to be audited as well as how long audit journal receivers need to remain resident on the system.