てっくらのーとは、触れた技術のメモと日常の記録が少し合わさった個人のサイトです。
Kinesis エージェントのインストールと起動 (続き)
前エントリでkinesis-agentをインストールしログストリーミングを設定しましたが、数日後にactive (exited)
となっていたので修正したメモ。
active (exited)
となってしまっていた
$ sudo service aws-kinesis-agent status
● aws-kinesis-agent.service - LSB: Daemon for Amazon Kinesis Agent.
Loaded: loaded (/etc/init.d/aws-kinesis-agent; bad; vendor preset: enabled)
Active: active (exited) since Sun 2019-12-15 13:32:52 UTC; 4 days ago
Docs: man:systemd-sysv-generator(8)
Process: 19424 ExecStop=/etc/init.d/aws-kinesis-agent stop (code=exited, status=0/SUCCESS)
Process: 19442 ExecStart=/etc/init.d/aws-kinesis-agent start (code=exited, status=0/SUCCESS)
Tasks: 0
Memory: 0B
CPU: 0
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
agent によってストリーミングされるときに排出されるログの aws-kinesis-agent.log
も停止していた。
journald ログ
調べてみると、journald のログとディスクスペースの関連らしいことが分かった。
$ dmesg | grep journal
[ 4.865832] systemd-journald[419]: Received request to flush runtime journal from PID 1
[11772237.143871] [ 419] 0 419 9265 1196 21 4 0 0 systemd-journal
[12013425.078331] [ 419] 0 419 9265 1196 21 4 0 0 systemd-journal
[12049434.596580] systemd-journald[419]: Received SIGTERM from PID 1 (systemd).
[12049539.272374] systemd-journald[31574]: Received SIGTERM from PID 1 (systemd).
[12049894.773647] systemd-journald[31602]: Received SIGTERM from PID 1 (systemd).
$ sudo systemctl status systemd-journald
(略)
Dec 20 13:01:01 ip-172-26-6-127 systemd-journald[31574]: Runtime journal (/run/log/journal/) is 4.8M, max 4.8M, 0B free.
対処
以下の方針とした。
- ログのディレクトリを
/var/log/journal
とする。 - ログのサイズを指定する。
ログの排出先ディレクトリを変更するには直接/var/log/journal
のディレクトリを作成すればよいらしい。
$ sudo mkdir /var/log/journal
$ sudo systemctl restart systemd-journald
$ sudo systemctl status systemd-journald
● systemd-journald.service - Journal Service
Loaded: loaded (/lib/systemd/system/systemd-journald.service; static; vendor preset: enabled)
Active: active (running) since Fri 2019-12-20 13:02:46 UTC; 4s ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 31602 (systemd-journal)
Status: "Processing requests..."
Tasks: 1
Memory: 11.2M
CPU: 116ms
CGroup: /system.slice/systemd-journald.service
└─31602 /lib/systemd/systemd-journald
Dec 20 13:02:46 ip-172-26-6-127 systemd-journald[31602]: System journal (/var/log/journal/) is 8.0M, max 1.9G, 1.9G free.
Dec 20 13:02:46 ip-172-26-6-127 systemd-journald[31602]: Runtime journal (/run/log/journal/) is 4.8M, max 4.8M, 0B free.
Dec 20 13:02:46 ip-172-26-6-127 systemd-journald[31602]: Time spent on flushing to /var is 109.556ms for 5707 entries.
Dec 20 13:02:46 ip-172-26-6-127 systemd-journald[31602]: Journal started
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
ん。少し思っていたかたちと違う。排出先は/var/log/journal
だけとしたい。
そのときは/etc/systemd/journald.conf
で設定値を編集するとのこと。
/etc/systemd/journald.conf
Storage
行のコメントアウトを削除して値をpersistent
に設定する。
[Journal]
Storage=persistent
#Compress=yes
#Seal=yes
#SplitMode=uid
また、ログサイズを設定(正確にはディスクに書き込まれるサイズを設定)するのはSystemMaxUse
とのこと。SystemMaxUse
を256M
にする。
[Journal]
(略)
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
SystemMaxUse=256M
確認
$ sudo systemctl restart systemd-journald
$ sudo systemctl status systemd-journald
● systemd-journald.service - Journal Service
Loaded: loaded (/lib/systemd/system/systemd-journald.service; static; vendor preset: enabled)
Active: active (running) since Fri 2019-12-20 13:38:54 UTC; 1s ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 32080 (systemd-journal)
Status: "Processing requests..."
Tasks: 1
Memory: 308.0K
CPU: 4ms
CGroup: /system.slice/systemd-journald.service
└─32080 /lib/systemd/systemd-journald
Dec 20 13:38:54 ip-172-26-6-127 systemd-journald[32080]: System journal (/var/log/journal/) is 16.0M, max 256.0M, 239.9M free.
Dec 20 13:38:54 ip-172-26-6-127 systemd-journald[32080]: Journal started
ジャーナルログディレクトリが System journal のみになった。また、ディスクサイズを最大で256M
とできた。
この状態でkinesis-agentをスタートさせる。問題なく動作しているようだ。
$ sudo systemctl restart aws-kinesis-agent
$ sudo systemctl status aws-kinesis-agent
● aws-kinesis-agent.service - LSB: Daemon for Amazon Kinesis Agent.
Loaded: loaded (/etc/init.d/aws-kinesis-agent; bad; vendor preset: enabled)
Active: active (running) since Fri 2019-12-20 13:10:23 UTC; 12s ago
Docs: man:systemd-sysv-generator(8)
Process: 31729 ExecStop=/etc/init.d/aws-kinesis-agent stop (code=exited, status=0/SUCCESS)
Process: 31740 ExecStart=/etc/init.d/aws-kinesis-agent start (code=exited, status=0/SUCCESS)
Tasks: 15
Memory: 84.5M
CPU: 1.448s
CGroup: /system.slice/aws-kinesis-agent.service
└─31753 /usr/bin/java -server -Xms32m -Xmx512m -XX:OnOutOfMemoryError="/bin/kill -9 %p" -cp /usr/share/aws-kinesis-agent/lib:/usr/share/aws-kinesis
Dec 20 13:50:23 ip-172-26-6-127 systemd[1]: Stopped LSB: Daemon for Amazon Kinesis Agent..
Dec 20 13:50:23 ip-172-26-6-127 systemd[1]: Starting LSB: Daemon for Amazon Kinesis Agent....
Dec 20 13:50:23 ip-172-26-6-127 aws-kinesis-agent[31740]: * Starting aws-kinesis-agent
Dec 20 13:50:23 ip-172-26-6-127 aws-kinesis-agent[31740]: ...done.
Dec 20 13:50:23 ip-172-26-6-127 systemd[1]: Started LSB: Daemon for Amazon Kinesis Agent..
対処後
上記の設定で現在も動作しているが、疑問点が少し。
- ログローテートは?
journald.conf
の設定が無い場合、以下の条件のどちらかを満たすまでログが溜まり続けるらしい。参考。
- ジャーナルのサイズがファイルシステムの容量の10%もしくは4GBの小さいほうに到達する。
- ファイルシステムの空き容量が15%もしくは4GBの小さいほうに到達する。
/run/log/journal
でもこの条件は有効だと思っているので、ログが容量の10%となったらログローテートしそうなものだが…。Free
の項目が0となっていたので、ログローテートに必要な処理がディスク容量不足で出来なかったのかな、と思っているけど本当のところはどうなんだろ。