MiracleJobLogo
エンジニアのエンジニアによるエンジニアのためのサイト
News 07/19 おすすめ情報に 『 【資格取得者速報】 Aさん 「 Microsoft Security, Compliance, and Identity Fundamentals」 』 を追加しました。
会員登録するとキャリア診断やサイトに参加することができます。
あなたにおすすめな技術情報、資格、仕事などをお知らせします。

無料会員登録


パスワードを忘れた場合
LINEで送る
MiracleJobBanaLeft1
MiracleJobBanaLeft2


【業務紹介】audit.log急増によるディスク逼迫障害に対応する
profile-img
投稿者: ktamoiさん
投稿日:2023/05/30 21:37
更新日:
like-img
分類
技術
テクノロジー
Unix系サーバ
キャリア
運用・保守
投稿内容


八回目の投稿です。今回の内容は、参画先の案件で発生した障害について紹介します。

障害発生時の暫定対応から障害回避のための恒久対応までを経験するだけでなく、

参画前に学んだLinuxの基礎知識を活かす機会となりました。Linux関連の案件に参画

予定の方にとって、本投稿が参考になれば幸いです。

※ 発生した障害とその対応内容は、実際のものとは少し異なります



◆ 障害内容

まずは障害内容の概要について説明します。

参画先の案件では、電子帳票関連のサービスを提供するために、様々なサーバが稼働

しています。ある日、それらのサーバを監視するサーバから「サーバA(OSはRHEL)の

/領域の使用率が90%を超えた」といった内容のアラートが発報されました。ディスク

使用率に関するアラートは、ディスク使用率が100%となることを防ぐため、特定の

閾値を超えると発報されるようになっています(100%に到達すると、サーバが使用

不可となり、リストアが必要となる)。


アラート発報後、監視サーバにインストールしてあるリソース監視ソフトにて、サーバ

Aのディスク使用率を確認しました。すると、ディスク使用率が依然として増え続けて

いることが分かり、早急に対応を行うこととなりました。



◆ 事前知識

対応方法について説明する前に、Linux関連のコマンドについて補足しておきます。


【コマンドの概要】

今回用いる主要なコマンドについて説明します。

・du

 どのファイルやディレクトリがどれだけディスクを使用しているのかを確認する

 ためのコマンドです。dfコマンドとともに、運用保守ではよく使われるコマンド

 だと思います。

 代表的なオプションは次の通りです。

 ・-a: ファイルのディスク使用率も表示します。このオプションを付けない場合は、

     ディレクトリのディスク使用率のみ表示されます。

 ・-h: ディスク使用率の可読性を高めるためのオプションです。K(キロ)、

     M(メガ)、G(ギガ)といった接頭語を付けた数値で表示されます。


・sort

 ファイルの中身を行単位で並べ替えるコマンドです。今回は、duの結果を並べ替える

 ために使用します。代表的なオプションは次の通りです。

 ・-h: 接頭語を付けた数値で並び替えるためのオプションです。

 ・-r: 降順で並び替えるためのオプションです。


【コマンドの使用例】

概要だけでは分かりづらいため、実際の使用例も説明します。

4つのファイルがあるディレクトリ「/home/parallels/test」にて、duコマンドを

実行した例です。

$  du /home/parallels/test


/home/parallels/testの総容量が22,532バイトであることが分かります。

オプションを付けた場合も確認してみます。

$ du -ah /home/parallels/test


ディレクトリの総容量だけでなく、各ファイルのファイルサイズも読みやすい表記で

確認できます。さらに表示を見やすくするため、並べ替えも行ってみます。

$ du -ah /home/parallels/test/ | sort -hr


結果を降順に並べ替えることができました。この結果から、fileDが最も使用率を占めて

いるファイルであることがすぐに分かります。なお、sortコマンドのオプションからhを

抜くと、使用量単位での降順にならないことも確認できます。

$ du -ah /home/parallels/test/ | sort -r


より詳細な内容については、参考1が分かりやすいです。



◆ 暫定対応

それでは、障害発生時の対応について紹介します。

監視ソフトにて/領域の使用率が急増していることは分かりましたが、具体的な要因

(どのディレクトリの容量が急増しているかなど)は、サーバAにログインして確認

する必要があります。サーバAにログイン後、duコマンドにてディレクトリやファイルの

使用率を確認しました。

# du -ah / | sort -hr

このコマンドを何度か実行し、その結果を比較してみると、/var/log/audit/audit.logの

ファイルサイズに違いが見られ、「audit.log」が急増していることが分かりました。

※ /と/varでパーティションを分割していない

audit.logは、RHELにおける監査ログのことで、どのユーザがどのコマンドを実行した

のかといった情報が記載されます。このファイルを確認すると、あるユーザが大量の

コマンドを実行していることが分かり、それによりaudit.logのファイルサイズ急増に

繋がっているようでした。幸いにもそのユーザとはすぐに連絡がつき、該当のコマンドの

実行を中断することで、ファイルサイズ増加を止めることができました。



◆ 発生原因

audit.logはファイルサイズが大きくなることがあるため、サーバAではそのファイル

サイズの上限を定め、上限を超える場合はローテート(自動的に古いログを消去)

するといった設定となっていました。具体的には、1ファイルの上限は64MBで、

ファイル数が99を超えるとローテートされるようになっており、その合計サイズは

最大でも64MB×99≒6.3GB程度に収まるはずでした(そのため、audit.logにいくら

ログが記録されようと、ディスク逼迫には繋がらない想定だった)。ところが、

運用が進むにつれ、サーバAの/領域に様々な資材が保存されていき、気が付けば

ローテート用のバッファ6.3GBがなくなっていたというわけでした。


ディスクの空き容量が少なくなったときはログ収集を中止するといった設定はされて

いたため、ログが増加してもディスク使用率が100%になることはありません。しかし、

中止したからといって、急増したログが減るわけではないため、依然としてディスクが

逼迫された状態が続くことになります。



◆ 恒久対応

/領域に保存された資材を整理して、6.3GBの空き領域を捻出できれば本事象は解決

します。しかし、資材を整理するためにかかる工数や、今後も同様の事象が発生し

うることを考慮し、最終的には次の方法で対応することになりました。


・audit.logの出力先を/領域から/data領域に変更する


サーバAには、ディレクトリ/dataが/とは別のパーティションに割り当てられており、

ここは十分な空き容量が確保されています。audit.logに関する設定ファイル

(/etc/audit/auditd.conf)を編集することで、十分な空き容量のある/data領域に

ログが出力されるよう設定します。具体的な設定手順は次のとおりです。


①作業準備

auditd.confのバックアップを取得します。

$ sudo -s

# id

# mkdir -p /home/parallels/work_$(date '+%Y%m%d')

# cp -pi /etc/audit/auditd.conf /home/parallels/work_$(date '+%Y%m%d')/auditd.conf.bk

# ls -la /etc/audit/auditd.conf

# ls -la /home/parallels/work_$(date '+%Y%m%d')/auditd.conf.bk

# diff /etc/audit/auditd.conf /home/parallels/work_$(date '+%Y%m%d')/auditd.conf.bk


②出力先ディレクトリの作成

新しい出力先を別パーティションに作成します。

必要に応じて各ディレクトリのパーミッションを適切なものに変更します

(例:/data/log/auditはrootユーザのみアクセス可能など)。

# ls -ld /var/log/audit

# mkdir -p /data/log/audit

# ls -ld /data/log/audit


③設定ファイルの編集

出力先の変更に際しては、/etc/audit/auditd.confのパラメータ「log_file」を編集

します(参考2)。log_fileの値を、②で作成したディレクトリに書き換えます。

# grep log_file /etc/audit/auditd.conf

# vi /etc/audit/auditd.conf

# grep log_file /etc/audit/auditd.conf

# ls -la /etc/audit/auditd.conf

# ls -la /home/parallels/work_$(date '+%Y%m%d')/auditd.conf.bk

# diff /etc/audit/auditd.conf /home/parallels/work_$(date '+%Y%m%d')/auditd.conf.bk


④設定の反映

audit.logにログを記入するauditdデーモンに対し、③で編集したauditd.confファイルを

読み込ませます(参考3)。設定反映前後でデーモンの状態を表示させ、エラーが出て

いないことも確認しています。サーバを再起動させることなく気軽に設定できますが、

SELinuxが有効である場合はエラーが出る可能性があります。

※ エラーが出たからといって、安易にSELinuxを無効化しない

# service auditd status

# service auditd reload

# service auditd status


reloadした際に「No change」や「No rules」と出ていますが、今回は気にしなくても

構いません。


⑤ログ出力の確認

auditd.confファイルの読み込み後、タイムスタンプを比較してみます。

sudoコマンドなどを実行すると、監査ログが/data/log/aduit/audit.logに出力される

ようになったことが確認できます。

# ls -l /var/log/audit/audit.log

# ls -l /data/log/aduit/audit.log


なお、ログ管理ツールなどでaudit.logを収集している場合は、出力先変更後も正しく

収集されるように設定することを忘れないようにしましょう。



◆ 感想など

運用が長期的なものになれば、こういった障害が起こりうるということが分かりました。

また、恒久対応の調査や検証、設定だけでなく、一連の内容を顧客に説明するなど、

幅広く経験を積むことができて良かったです。



◆ 参考

・【参考1】https://zenn.dev/supersatton/articles/a2a3e1fb994e69

・【参考2】https://www.usupi.org/sysad/222.html

・【参考3】https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/security_guide/sec-starting_the_audit_service



以上です。



コメント


MiracleJobBanaRight1
MiracleJobBanaRight2
MiracleJobBanaRight3