7で採用されている新しいログ管理の仕組み「journald」を取り上げます。journaldとrsyslogとの連携やシステム全体に渡って様々なログを収集するsosreportについても簡単に触れます。7は、ログの管理を行う新しい仕組みが導入されています。7からは、ログに関するより細かい指定や操作を行うことができるようになっています。7でのログ管理は、systemdが担当しています。サービス名は、「systemd-journald.service」です。一般的には、「journald」と呼ばれています。7からは、もはやsyslogdデーモンの起動は不要です。その代わり、ログの収集の仕組みであるjournaldのサービスを起動する必要があります。journaldが起動しているかどうかは、systemctlコマンドで確認できます。full.journaldが収集したログを適宜整形、加工できるのが、journalctlコマンドになります。journalctlコマンドは、ログの出力に関する様々なオプションを備えています。7の管理者が、知っておくべきjournalctlコマンドを使ったログ管理の基礎をご紹介します。7のブート時のログを見たい場合があります。直前のブートのログを確認するには、journalctlコマンドに-bオプションを付与します。-b日時でフィルタリングする以下は、2014年9月5日午前1時23分45秒から2014年9月7日午前4時56分0秒までのログを出力する例です。cpuset......デフォルトでは、自動的にlessページャが起動し、ログをスクロールさせて閲覧することができます。lessページャの自動起動が不要の場合は、--no-pagerオプションを付与します。特定のサービスに限ってログを出力させたい場合は、そのサービスのユニット名を指定します。daemon.......--sinceオプションに「today」を指定することで、今日ログされたものから現在までのものを抽出して出力することも可能です。93.3M).......他にも、--sinceオプションに「yesterday」や「tomorrow」を指定することも可能です。過去のログだけでなく、現在のシステムが出力しているログをリアルタイムで閲覧したい場合があります。/var/log/messages」のように、tailコマンドを駆使していたようなログの閲覧方法を実現するには、-fオプションを付与して実行します。root.......従来のsyslogでは、ログのプライオリティ管理ができました。journalctlでも同様にプライオリティによる出力のフィルタリングを行うことができます。特定のプライオリティのログのみを出力させる場合は、-pオプションにプライオリティを付与してjournalctlコマンドを実行します。directory上記の-pオプションには、プライオリティの値で指定することも可能です。プライオリティの値とログレベルの対応関係を以下に示します。debugカーネルログのみを表示させることも可能です。従来のsyslog管理のdmesgに相当します。found......特定のプロセスIDのみに関するログを出力したい場合は、「_PID=プロセス番号」を付与して実行します。(uid=0)サービスを提供する実行ファイルのパスを指定することも可能です。以下では、コマンドの実行をスケジューリングするサービス「crond」の実体である/usr/sbin/crondに関連するログのみを出力する例です。7のjournaldの設定では、ログファイルは、/run/log/journalディレクトリ以下に格納されています。/runディレクトリはtmpfsファイルシステムでマウントされており、OSを再起動すると、/run/log/journalディレクトリ配下に格納されていたログファイルは削除されてしまいます。/sys/fs/cgroupOSを再起動してもログが保管されるようにするためには、journaldの設定ファイル/etc/systemd/journald.conf内で「Storage=persistent」を指定し、コメントアウトを意味する行頭の「#」を削除します。/etc/systemd/journald.conf...[Journal]Storage=persistent...設定ファイルを編集したら、journaldサービスを再起動します。systemd-journald/etc/systemd/journald.conf内で「Storage=persistent」を指定した場合、/var/log/journalディレクトリ配下にディレクトリとログが作成され、ログが永続的に保存されるようになります。system.journal/etc/systemd/journald.conf内でデフォルトの「Storage=auto」を指定すると、/var/log/journalディレクトリが存在しない場合は、tmpfsでマウントされている/run/log/journalディレクトリ配下にログが保管されます。/var/log/journalディレクトリが存在する場合は、/var/log/journalディレクトリ配下にログが保管されます。ログの容量制限journaldによって生成されるログの容量を制限するには、journald.confファイルの「SystemMaxUse=」パラメータに値を設定します。以下は、ログの容量を128MBに制限する例です。/etc/systemd/journald.conf...SystemMaxUse=128M...パラメータを記述したら、journaldを再起動します。systemd-journald今現在、journaldで管理されている全てのログの容量を確認するには、journalctlコマンドに「--disk-usage」オプションを付与して実行します。7におけるログは、journaldによって一元的に管理されていますが、そのログを遠隔にあるログサーバーに転送したい場合があります。ログサーバーには様々な種類がありますが、一般的に広く利用されているのは、rsyslogサーバーです。7でもjournald以外にrsyslogによるログサーバーを構築することが可能となっています。6などのjournaldに対応していないsyslogベースのOSが混在する環境では、ログサーバーとして、使い慣れたrsyslogでログを統合して管理することが考えられます。図1:管理対象サーバー側でjournaldによりログを取得し、rsyslogサーバーでログを一括管理する。7のrsyslogサーバーにログを転送する手順を紹介します。7上で、rsyslogサーバーを構築します。rsyslogサーバーの設定ファイルrsyslog.confファイルを編集します。514」は、rsyslogにおいてUDPの514番ポートを使用する設定になります。ログを取得したい管理対象サーバーのIPアドレスと、ログサーバー側で保管するログファイルのフルパスを記述します。上記では、管理対象サーバーのIPアドレスが172.16.70.2の場合は、ログサーバー側の「/var/log/journalctl_log_172.16.70.2」というファイルにログを書き込むというルールを記述しています。上記の設定ファイルを記述したら、ログサーバー側でjournalctl_log_172.16.70.2という空のファイルを作成しておきます。/var/log/journalctl_log_172.16.70.2rsyslogはUDPの514番ポートを使って通信を行いますので、ログサーバー側のファイアウォールの設定を変更します。UDPの514番ポートを開ける設定は、以下のとおりです。--permanentsuccessログサーバー側のファイアウォールの設定を反映します。--reloadログサーバー側のUDPの514番ポートが開放されているかを確認します。rules:ログサーバー側のrsyslogサービスを再起動します。Service.これで、IPアドレスが172.16.70.2の管理対象サーバーのログをrsyslogで収集するログサーバーが構築できました。次に、管理対象サーバー側でjournaldによるログ収集を設定します。管理対象サーバー側でも、ログ管理サーバーと同様に、UDPの514番ポートを開放します。--reload管理対象サーバー側でjournaldが稼働していない場合は、journaldを起動します。/usr/lib/systemd/systemd-journald......管理対象サーバー側で、journalctlコマンドを使ったログ取得を行い、遠隔のrsyslogサーバー(IPアドレスは172.16.70.99とします)にログを転送します。172.16.70.99:514.ログが転送されているかのテストは、管理対象サーバー側で、httpdやpostfix等のサービスを再起動したりすることでサービス再起動に関するログが生成され、rsyslogサーバーにそのログが転送されるはずです。Sealing:FSS)と呼ばれる技術を使って、ジャーナルの一貫性の確認を行うことが可能です。定期的に自動生成されるキーを使い、ログの完全性検証を行うことが可能です。一般的に、侵入者は、Linuxシステムに保管されているログの履歴を改変しようとします。このキーを使えば、この改変をチェックすることができ、システムへの侵入検知にも有用です。具体的には、事前に検証用のキーを生成しておき、そのキーを意味するQRコードを管理者の携帯電話やスマートフォンに保管しておきます。検証時には、管理者の携帯電話やスマートフォンに保管しておいた文字列を、journalctlコマンドで読み込ませ、ログが改変されていないかをチェックするという流れになります。7においてもテクノロジープレビューに位置づけられているため、正常な動作が保証されているわけではありません。挙動の確認やテスト目的で利用して下さい。以下では、具体的に、検証用のキーを含むQRコードの生成手順とログの完全性の検証方法を示します。キーペアを生成します。このキーペアは、ジャーナルのシーリングに利用するキーです。--force図2:検証鍵が赤い文字で表示されている。QRコードを携帯電話やスマートフォンで読み取り、文字列を記録しておく(クリックで拡大)上記コマンドにより、「シーリング鍵」が、ローカルシステムのディレクトリ/var/log/journalディレクトリ配下に格納されます。シーリング鍵は15分毎に自動的に更新されます。この鍵は、複数のホストで共用して利用して利用することは避けて下さい。検証鍵が赤い文字列で表示されています。この文字列を書きとめておきます。この文字列は、ローカルシステムのディスク上に保管することは避けて下さい。検証鍵を示すQRコードを管理者の携帯電話やスマートフォンで読み取り、表示されたシーリング鍵と検証鍵の文字列を保管しておいて下さい。システムに記録されているジャーナルの完全性の検証は、journalctlコマンドに、「--verify-key」オプションを付与し、検証鍵の文字列を指定します。ee2e0e-045220-a3cec8-f111f8/17ec78-35a4e900もし、ジャーナルの完全性が示された場合は、「PASS」と表示されます。システム全体の様々なログと設定ファイルをまとめて収集するsosreportLinuxシステムで管理されるログには、様々な種類が存在しますが、それらのログを一つ一つ手動で収集するのは非効率です。ログだけでなくその時の設定ファイルも証拠として保管しておきたい場合が少なくありません。7では、それ専用のsosreportコマンドが用意されており、システム全体のログと設定ファイルを簡単に一括取得することが可能です。以下では、sosreportコマンドを使ったログと設定ファイルの取得手順を示します。sosreportコマンドは、sosパッケージに含まれていますので、インストールされていない場合は、yumコマンドでインストールします。sossosreportコマンドにより、ログと設定ファイルを収集します。quit.」が表示されたら、ENTERキーを押します。すると、以下のように、名称の入力が促されます。[centos70n02]:このままでよければ、ENTERキーを押します。次に、sosreportコマンドが生成するレポートのケースナンバーの入力が促されます。for:このままでよければ、ENTERキーを押します。7がインストールされたシステム全体に渡ってログと設定ファイルを収集します。すると、以下のように、ログと設定ファイルがアーカイブされたファイルが生成された旨のメッセージが表示されます。representative.上記のsosreport-centos70n02-20141022101820.tar.xzをtarコマンドで展開し、中身を見てみましょう。var/様々なログファイルや設定ファイル、そしてコマンドの出力結果がディレクトリ毎に整理されて記録されています。sosreportコマンドは、--reportオプションを付与して実行すると、取得したログや設定ファイル等をWebブラウザで簡単に閲覧することが可能なHTMLファイルを生成します。HTMLファイルは、上記アーカイブ内のsos_reportsディレクトリに保管されています。今回は、sosreportコマンドを実行した管理対象サーバー上に、Webサーバーを起動し、遠隔にある管理者のパソコンからsosreportのアーカイブを展開した中身をWebブラウザで閲覧できるようにしてみましょう。展開したアーカイブファイルを/var/www/htmlに移動します。Webサーバーを起動します。httpdファイアウォールの設定を行います。遠隔にある管理者のPCと通信を行うLANセグメントを確認します。rules:上記結果より、今回は、publicに所属するLANセグメントについてHTTPサービスを許可します。今回は、HTTPサービスの提供するゾーンとしてpublicを選択していますが、実際には、ログの盗聴等を考慮し、暗号化されたセキュアな通信経路を考慮して下さい。--reloadこれで、HTTPを使って/var/www/htmlディレクトリ配下のファイルをクライアントに閲覧できるようになりました。次に、/var/www/htmlディレクトリに移動させたsosreportのディレクトリのパーミッションを変更します。./sos_reports以上で、遠隔のPCからsosreportコマンドで取得したログや設定ファイル等をWebブラウザで確認することができます。図3:sosreportを実行した管理対象サーバー上でWebサーバーを稼働させることで、ログ、設定ファイル、コマンド実行結果等をHTTP経由でクライアントに提供する。7におけるログ管理を紹介しました。従来のrsyslogによる管理と比較すると、journaldは、豊富なフィルタリング機能が提供されており、ログの管理性が向上しています。システムの保守に関わる部門では、sosreportなどのログ及び設定ファイルの収集ツールが重宝されています。ログの管理を効率的に行い、日々の運用やトラブル時の保守サポートに役立ててみて下さい。7に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。1996年頃からオープンソースに携わる。サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Hadoop認定技術者。HP公式ブログ執筆者。ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。VeloCloudが選ばれる理由SD-WANとはなにか。Linuxエンジニア育成への思いF5とNGINXの組み合わせで、サービス公開をよりセキュアに。ITがお届けするポッドキャストです。