Log-file Management
Why collect log-files?
- Troubleshooting
- …identify & diagnose operative issues
- …for example: connection issues, application errors, system crashes
- …helps to improve system configuration …optimize performance & efficiency
- …use errors & warnings to identify irregular behaviour
- Reliability
- …insights into system activity (…helps for capacity planing)
- …identify recurring issues …enable proactive measures
- Security …detect & alert potential security threats
- …for example unauthorized access attempts …suspicious activity
- …monitor unintentional configuration changes
- …monitor security updates …unpatched vulnerabilities
- Compliance …regulatory requirements …industry standards
Troubleshooting
Analyze log-files to identify the root cause of a problem
- What functionality is not working?
- …identify associated warning & error messages from the logs
- …extract messages with simple CLI tools like
grep,less,tail
- Correlate log files from different sources…
- …identify patterns and relationships between events
- …repeated errors & warning …consider time stamps
# continuously print logs
less +F /var/log/messages
more -f /var/log/messages
tail -f /var/log/messagesCommon log files for troubleshooting
/var/log/{syslog,messages,kern.log}- …system wide logs …hardware issues
/var/log/{apache,myswl,nginx}and other- …service & application specific logs
- …typically user-facing …referenced by trouble tickets
Security
Common security-related logs:
/var/log/{syslog,messages}- …system-wide logs including security-related event
- …system crashes, network connectivity, hardware error
- …very relevant to forensics
/var/log/{auth.log,security}- …authentication successes and failures
- …changes to user accounts and permissions
/var/log/sshremote authentication and login attempts/var/log/audit.log
Monitoring logs is a critical component of a robust security strategy
- …used with IDS (Intrusion Detection Systems)
- …detect anomalies …suspicious activity
- …identify patterns of behavior
- …response (for example blocking traffic from a suspicious IPs)
- …enable real-time threat detection and response
Regulations …laws, standards, and guidelines to…
- …ensure confidentiality, integrity, availability of sensitive data
- …common measures to protect sensitive information from
- …unauthorized access and use
- …disclosure and modification (espionage)
- …encryption (ransom-ware) or destruction
Logging Types
Types of logging mechanisms:
- Kernel …errors and warning from the Linux kernel
- …via a kernel ring buffer (…available beginning of boot)
- …use
dmesgto print kernel-logs
- User …processes services in user-space
- …typically based on the Syslog protocol
sudo dmesg
sudo dmesg –facility=user
sudo dmesg | grep -i -E 'error|warn|failed'
sudo dmesg | lessMethods how a service can write a log file:
- …directly into a dedicated log-file
syslogdaemon …forward messages to a log-servicejournald…Systemd integrated log-service
Usage
multitail1 displays multiple log files simulations in terminallogwatch2 …identify log-patterns and automate response
Compressed Logs
Reading compressed logs…
zcat…cat to view compressed filezgrep…grep to search inside the compressed fileszless…pager for compressed fileszdiff…comparison of compressed files
Create Messages
Send a log message:
logger…simple log clientsystemd-cat…send messages to the systemd journalwall…send messages to all logged-in users
# send an emergency message from the auth facility
logger -p auth.emerg "Somebody tried to connect to the system"
# send message to journal via stdin
echo "This is a message to journald" | systemd-cat
# send the output of the `ls` command to the journal
systemd-cat ls -lSyslog
Standard to format and transmit log messages
- Massages contain following elements:
- Priority …number indicating severity of the message
- Header …timestamp, hostname, and process ID
- Message …actual log message
Syslog daemons …collect, process, and forward log messages
syslogd(1980)syslog-ng(1998)rsyslog(2004)systemd-journald…incorporates syslog-like functionality
Architecture
Client-server architecture …terminology:
- Originator …aka
syslog-client …sends messages over network - Relay …forward messages over the network …can transform messages
- Collector …
syslog-server …stores logs from clients
Logging on a local Linux system…
- Applications & services (Originators)…
- …embed syslog or journald librariessend
- …send logs to local collector
- Typically no rely on localhost
- Collectors
rsyslogand thejournalddaemon
Levels
| Value | Severity | Keyword |
|---|---|---|
| 0 | Emergency | emerg |
| 1 | Alert | alert |
| 2 | Critical | crit |
| 3 | Error | err |
| 4 | Warning | warning |
| 5 | Notic | notice |
| 6 | Informational | info |
| 7 | Debug | debug |
systemd-journald
Data stored to /run/systemd/journal/ & /var/log/journal
Systemd service that provides…
- Structure
- …enforced structure for indexed log files (called journals)
- …simplifies filtering (for example by priority, time-frame)
- Indexing
- …uses a binary storage for logs
- …stores journal in a secure manner
- …lookups are faster then plain text
- Access control
- …storage files are split by user (with correct permissions)
- …users have access to their logs
- Automatic log rotation
- …journal files are automatically rotated if they grow above certain limits
Usage
journalctl used to read the journal binary log files
- …all entries, from oldest to newest
- …uses a pager …defaults to
less…or--no-pager…orSYSTEMD_PAGER=cat
Most common usage:
# …continually print new messages added to log …aka follow
journalctl -f
journalctl -k # kernel ring buffer
journalctl -f [...] # tail the log file
journalctl -o verbose -n
journalctl -f -l SYSLOG_FACILITY=10
journalctl --vacuum-time=2weeks # clean journal files
journalctl -p err..alert # priority# …by time constrains
journalctl --since=yesterday
journalctl --since=00:00 --until=9:30
journalctl --since -30minJournal Fields
Filter messages by journal fields
- …details in
man systemd.journal-fields - …option
-Fused to show available values for a given journal field
# …list for which user IDs logs exist
journalctl -F _UID | xargs id ${}
# …by specific user or group
journalctl _UID=1234
journalctl _GID=4321
# …by process ID or executable path
journalctl _PID=123456
journalctl _EXE=/bin/bashSystem Units
Messages for the specified systemd unit…
-u, --unit=UNIT|PATTERN- …pattern matches unit names found in the journal
- …match pattern that includes
UNIT=name.service
# list available units…
journalctl -F UNIT | sort | less
# …by unit
journalctl -u nginx.service
journalctl -u sssd.service --since today
journalctl -u ldap.service -u sssd.service
# …match all systemd units
journalctl -u 'systemd*'
# …or
journalctl _SYSTEMD_UNIT=sshd.serviceConfiguration
Default configuration in /etc/systemd/journald.conf
# …after changes to the configuration
systemctl reload systemd-journald.servicePersistent Storage
Read logs from previous boots…
# limit messages to recent boot
journalctl -b
# List the boot IDs
journalctl --list-boot # …includes time-frame of log accumulation
# …used for reference with option `-b`
journalctl -b -1
# storage used for logs
journalctl --disk-usage
# shrink your journal by indicating a size
journalctl --vacuum-size=1G
# …keep entries from the last year
journalctl --vacuum-time=1yearsDifferent types of storage…
volatile…stores only in memory …below/run/log/journalpersistant…stores on local device …below/var/log/journalnone…turns off all storage
/etc/systemd/journald.conf.d/storage.conf
[Journal]
Storage=persistentEnable this change without reboot…
systemd-tmpfiles --create --prefix /var/log/journal
systemctl restart systemd-journaldSpecifies the maximum disk space that can be used by the journal
/etc/systemd/journald.conf.d/limits.conf
[Journal]
SystemMaxUse=5GForward Messages
Forward messages to a central log server with syslog-ng
/etc/systemd/journald.conf.d/forward.conf
[Journal]
ForwardToSyslog=yesCentralized Logging
dnf install -y systemd-journal-remoteMultiple ways of centralizing journald logs…
- …forwards entries to a local
syslog.socket - …
rsyslogdaemon reads from the local journal systemd-journal-remote.service- …to accumulate logs on a single server
- …work in “pull” or “push” mode
systemd-journal-upload.service- …send logs to a collection service
- …for example Elasticsearch
systemd-journal-gatewayd.service- …serves journal events over the network
- …client connect using HTTP …port 19531 (by default)
systemd-journal-gatewayd
HTTP server for journal events…
systemctl enable --now systemd-journal-gatewayd
# check connection
curl http://localhost:19531/entries?bootRead from systemd-journal-gatewayd…
# pull journal from another node
export PATH=$PATH:/usr/lib/systemd
systemd-journal-remote --output=/tmp/node.journal --split-mode=none \
--url=http://$node:19531
# …read the journal
journalctl --file /tmp/node.journalsystemd-journal-remote
Receive journal messages over the network…
- …“active” …requests and pulls the data
- …can read more than one stream at a time
- …output interleaved …each source one stream
- …“passive” …waits for a connection …receives massages pushed
Configuration default and drop-ins:
/etc/systemd/journal-remote.conf
/etc/systemd/journal-remote.conf.d/*.confCertificate configuration…
/etc/ssl/private/journal-remote.pem…key file/etc/ssl/certs/journal-remote.pem…certificate file/etc/ssl/ca/trusted.pem…CA certificate file
systemctl enable --now systemd-journal-remote.socket systemd-journal-remote.serviceLog Rotation
Automated process to archive and compress log-files…
- …renames existing log files appending a timestamp
- …creates a new log-file to the application
- …compress rotated log files to save disk user-space
- …deletes old log-files according to a rule
Typically run as a cron job …configuration in:
/etc/logrotate.conf
/etc/logrotate.d/Rsyslog
Rsyslog 3 …logging and event processing tool-set …highly customizable in the details of this message flow
- Messages enter rsyslog with the help of input modules 4…
- …passed to a set of conditionally applied rules 5…
- …when rules match message is transferred to an action (outputs)
- …action write to a file, database or forwards it to a remote host
# install documentation
dnf install rsyslog-doc
$BROWSER /usr/share/doc/rsyslog/html/index.html/etc/rsyslog.conf default configuration…
- …consists of statements …directives processed from the top until match
- …recommended to use RainerScript type statements when
- …configuration parameters are required …for example actions
- more elaborate control-of-flow is required …nesting
- Extend configuration in
/etc/rsyslog.d/…included by default rsyslogd -N 1…to validate syntax of configuration files
Filters
A rule consists of a filter 6 and an action list …filters provide yes/no decisions and thus control-of-flow capability
Facility/priority-based filters:
- …
<facility>.<priority>(facility and priority separated by a dot) - …facility …subsystem that produces a specific syslog message
- …priority (or higher) …priority of a syslog message
- …preceding
=only messages with specified priority will be selected - …preceding
!selects messages except those with the defined priority none…for facilities with no given priorities
- …preceding
*…define all facilities or priorities,…define multiple facilities and priorities;…combine multiple selectors
kern.* # all kernel messages
mail.crit # all critical mail syslog messages
cron.!info,!debug # cron syslog messages except info or debug priority
*.err;mail.debug # all error message, and debug from mailRemote Logs
Example:
cat > /etc/rsyslog.d/10-remotelog.conf <<EOF
auth,authpriv.* @$SERVER_IP_ADDRESS:514
EOF
# syntax check file
rsyslogd -N 1 -f /etc/rsyslog.d/10-remotelog.conf
systemctl restart rsyslog && systemctl status rsyslogMessages can be sent using @ UDP (default) or @@ TCP
auth.* @$SERVER:$PORT # UDP
*.err @@$SERVER:$PORT # TCPMore advanced configuration with the omfwd 7 module:
auth.* action(type="omfwd"
action.resumeRetryCount="-1"
target="example.com" port="514" protocol="tcp")TLS
Client check the server identity:
- Install a functional CA certificate
- Configure the client to use “TLS encryption”8…
- …via plain TCP (will not work over UDP)
- …utilize a so-called “network stream layer”9 (netstream)
- …driver layer currently consists of the “ptcp” and “gtls” library plugins
# install required dependencies
dnf install -y rsyslog-gnutlsAdd following to the configuration:
# certificate files - just CA for a client
$DefaultNetstreamDriverCAFile /path/to/contrib/gnutls/ca.pem
# set up the action
$DefaultNetstreamDriver gtls # use gtls netstream driver
$ActionSendStreamDriverMode 1 # require TLS for the connection
$ActionSendStreamDriverAuthMode anon # server is NOT authenticatedReferences
[M23PT] Guide to Computer Security Log Management, NIST
https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-92.pdf
Footnotes
MultiTail
https://www.vanheusden.com/multitail
https://github.com/folkertvanheusden/multitail↩︎Rsyslog Documentation
https://www.rsyslog.com/doc
https://wiki.gentoo.org/wiki/Rsyslog↩︎Modules, Rsyslog Documentation
https://rsyslog.readthedocs.io/en/latest/configuration/modules/↩︎Rulesets in rsyslog, Rsyslog Documentation
https://rsyslog.readthedocs.io/en/latest/concepts/multi_ruleset.html↩︎Filter Conditions, Rsyslog Documentation
https://rsyslog.readthedocs.io/en/latest/configuration/filters.html↩︎omfwdForwarding Output Module
https://www.rsyslog.com/doc/configuration/modules/omfwd.html↩︎Encrypting Syslog Traffic with TLS
https://rsyslog.readthedocs.io/en/latest/tutorials/tls.html#client-setup
https://rsyslog.readthedocs.io/en/latest/tutorials/tls_cert_client.html↩︎NetStream Drivers, Rsyslog
https://www.rsyslog.com/doc/concepts/netstrm_drvr.html↩︎