ホームページ >バックエンド開発 >PHPチュートリアル >Linux ログを分析する方法
ログには処理する必要のある情報がたくさんありますが、それを抽出するのが思ったほど簡単ではない場合もあります。この記事では、今日から実行できる (検索するだけで) 基本的なログ分析の例をいくつか紹介します。より高度な分析についても説明しますが、適切に設定するにはある程度の努力が必要ですが、後で大幅に時間を節約できます。データの高度な分析の例には、要約カウントの生成、有効な値のフィルタリングなどが含まれます。
まず、コマンド ラインからいくつかの異なるツールを使用する方法を示し、次に、ログ管理ツールを使用して手間のかかる作業の多くを自動化し、ログ分析を簡単にする方法を示します。
Grep
を使用してテキストを検索することは、情報を検索する最も基本的な方法です。テキストの検索に最もよく使用されるツールは grep です。このコマンドライン ツールは、ほとんどの Linux ディストリビューションで利用でき、正規表現を使用してログを検索できます。正規表現は、一致するテキストを識別する特別な言語で記述されたパターンです。最も単純なパターンは、検索する文字列を引用符で囲むことです。
正規表現
これは、 Ubuntu システム の認証ログの検索です。」 ユーザー フーバー」 例:
$ grep "userhoover" /var/log/auth.log
10.0.2.2 ポート 4792 からの hoover のパスワードを受け入れました ssh2
pam_unix( hd:セッション): (uid=0)
pam_unix(sshd:session)によってユーザー hoover に対してセッションが開かれました: ユーザー hoover に対してセッションが閉じられました
正確な正規表現を構築するのは難しい場合があります。たとえば、ポート "4792" のような番号を検索したい場合は、タイムスタンプ も一致する可能性があります。 そしてその他不要なデータ。以下の Ubuntu の例は、望ましくない Apache ログと一致します。
$ grep "4792"/var/log/auth.log
10.0.2.2ポート4792 ssh2からhooverのパスワードを受け入れました
74.91.21.46 - -[31/Mar/2015:1 9: 44:32 +0000] "GET /scripts/samples/search?q=4972HTTP/1.0" 404 545 "-" "-"
サラウンド検索
もう 1 つの便利なヒントは、 grep を使用してサラウンド検索を実行できることです。これにより、一致の前後の数行が表示されます。エラーや問題の原因となっているものをデバッグするのに役立ちます。 B オプションは最初の数行を表示し、A オプションは次の数行を表示します。たとえば、ユーザーが管理者としてログインに失敗すると、そのユーザーの IP が逆解決されない、つまり有効なドメイン名を持っていない可能性があることがわかっています。これは非常に疑わしいです!
$ grep -B 3 -A 2'無効なユーザー' /var/log/auth.log
Apr 28 17:06:20ip-172-31-11-241 sshd[12545]: リバース216-19-2-8.commspeed.net [216.19.2.8] の getaddrinfo のマッピング チェックに失敗しました - 侵入の可能性があります!
Apr 28 17:06:20ip-172-31-11-241 sshd[12545] : 216.19.2.8 から切断を受信しました: 11: Bye Bye[preauth]
Apr 28 17:06:20ip-172-31-11-241 sshd[12547]: 216.19.2.8 からの無効なユーザー管理者です
4 月 28 日 17:06:20ip-172-31-11-241 sshd[12547]: input_userauth_request: 無効なユーザー admin[preauth]
4 月 28 日 17:06:20ip-172-31-11-241 sshd[12547] ]: 216.19.2.8 から切断を受信しました: 11: Bye Bye[preauth]
Tail
grep と tail を入れることもできます組み合わせて使用すると、 a ファイルの最後の数行、またはログをトレースしてリアルタイムで出力します。これは、サーバーの起動やコード変更のテストなど、対話型の変更を行うときに便利です。
$ tail -f/var/log/auth.log | grep '無効なユーザー'
Apr 30 19:49:48ip-172-31-11-241 sshd[6512]: 無効なユーザー ubnt 219.140.64.136 から
Apr 30 19:49:49ip-172-31-11-241 sshd[6514]: 219.140.64.136 からのユーザー管理者が無効です
About grep と定期式の詳細な紹介はこのガイドの範囲を超えていますが、 Ryan' のチュートリアル にはより詳細な紹介が記載されています。
ログ管理システムは、より高いパフォーマンスとより強力な検索機能を備えています。多くの場合、データのインデックス付けとクエリの並列実行が行われるため、 GB または TB のログを数秒ですばやく検索できます。比較すると、 grep には数分、極端な場合には数時間もかかります。ログ管理システムは、 Lucene のようなクエリ言語も使用します。これは、数値やフィールドなどを取得するためのより単純な構文を提供します。
Cut、AWK、とGroを使用しますk 解析
コマンドラインツール
Linux は、テキストの解析と分析のための複数のコマンドライン ツールを提供します。少量のデータを素早く解析したい場合には非常に便利ですが、大量のデータを処理する場合には時間がかかる場合があります。
Cut
cut コマンドを使用すると、区切り文字で区切られたログからフィールドを解析できます。区切り文字は、フィールドまたはキーと値のペアを区切る等号またはカンマを指します。
次のログからユーザーを解析するとします:
pam_unix(su:auth):authentication Failure; logname=hoover uid=1000 euid=0 tty=/dev/pts/ 0ruser =hoover rhost= user=root
次のように Cut コマンドを使用して、等号で区切られた 8 番目のフィールドのテキストを取得できます。以下は Ubuntu システムでの例です:
$ grep "authentication Failure" /var/log/auth.log Cut -d '=' -f 8
root hoover
root
nagios
nagios
AWK
また、も使用できます awk、より強力な解析フィールド関数を提供します。無関係なものをほとんど除外できるスクリプト言語を提供します。
たとえば、 Ubuntu システムに次の行のログがあり、ログインに失敗したユーザーの名前を抽出したいとします:
Mar 24 08:28:18ip-172 -31-11-241 sshd[32701]: input_userauth_request:無効なユーザー guest[preauth]
awk コマンドは次のように使用できます。まず、正規表現 /sshd.*invalid user/ を使用して、 sshd valid user の行と一致させます。次に、 { print $9 } を使用して、デフォルトの区切り文字スペースに基づいて 9 番目のフィールドを出力します。これにより、ユーザー名が出力されます。
$ awk'/sshd.*invalid user/ { print $9 }' /var/log/auth.log
guest
admin
info
test
ubnt
正規表現と出力フィールドの使用方法の詳細については、 Awk ユーザー ガイド を参照してください。
ログ管理システム
ログ管理システムにより分析が容易になり、ユーザーは多くのログファイルを迅速に分析できます。一般的な Linux ログや Web サーバー ログなどの標準ログ形式を自動的に解析できます。これにより、システムの問題に対処するときに解析ロジックを自分で作成することについて考える必要がなくなるため、時間を大幅に節約できます。
以下は、 RemoteHost と user ごとに解析された sshd ログ メッセージの例です。これは、クラウドベースのログ管理サービスである Loggly のスクリーンショットです。
非標準形式の解析をカスタマイズすることもできます。一般的に使用されるツールは Grok です。これは、一般的な正規表現ライブラリを使用し、生のテキストを構造化された JSON に解析できます。以下は、 Logstash でカーネル ログ ファイルを解析する Grok の設定例です。 マッチ =>メッセージ" =>"%{CISCOTIMESTAMP:timestamp} %{HOST:host} %{WORD:program}%{NOTSPACE}%{NOTSPACE}%{NUMBER:duration}%{NOTSPACE} %{GREEDYDATA:kernel_logs}"
}
}
Rsyslog
と
AWK
フィルターを使用します フィルタリングを使用すると、フルテキストの代わりに特定のフィールド値を取得できます検索。これにより、ログ情報の他の部分からの不要な一致が無視されるため、ログ分析がより正確になります。フィールド値を検索するには、まずログを解析するか、少なくともイベント構造を取得する方法が必要です。 アプリをフィルタリングする方法
通常は、1 つのアプリのログのみを表示したい場合があります。アプリケーションがすべてのレコードをファイルに保存する場合、これは簡単です。集約されたログまたは一元化されたログでアプリケーションをフィルタリングする必要がある場合、これはさらに複雑になります。これを行うには、いくつかの方法があります:
rsyslog
デーモンを使用して、ログを解析およびフィルタリングします。次の例では、 sshd
アプリケーションのログを sshd-message という名前のファイルに書き込み、他の場所で再発しないようにイベントを破棄します。この例をテストするには、これを rsyslog.conf ファイルに追加します。 :programname,isequal, “sshd” /var/log/sshd-messages&~
awk
のようなコマンド ライン ツールを使用して、次の値を抽出します。
sshd
ユーザー名などの特定のフィールド。以下は Ubuntu システムの例です。 $ awk'/sshd.*invalid user/ { print $9 }' /var/log/auth.logguestadmin
infotest ubnt
ログ管理システムを使用してログを自動的に解析し、必要なアプリケーション名の [フィルター] をクリックします。以下は、 Loggly ログ管理サービスから抽出された syslog ドメインのスクリーンショットです。アプリケーション名をフィルターします "sshd"、
エラーをフィルターする方法
その人が最も見たいものログの間違い。残念ながら、デフォルトの syslog 設定ではエラーの重大度が直接出力されないため、エラーをフィルタリングすることが困難になります。
この問題を解決するには 2 つの方法があります。まず、 rsyslog 設定を変更して、ログ ファイルにエラー重大度を出力し、表示と取得を容易にすることができます。 rsyslog 設定では、次のように pri-text を使用して テンプレートを追加できます: "< %pri-text;: %時間生成% ,%HOSTNAME%,%syslogtag%,%msg%n" この例は以下の形式で出力されます。メッセージ内にエラーを示す err が表示されます。
awk を使用できますまたは grep エラー情報を取得します。 Ubuntu では、この例では、 や > などのいくつかの構文機能を使用できます。これらは、このドメインにのみ一致します。 $ grep '.err>'/var/log/auth.log
2 番目のオプションは、ログ管理システムを使用することです。優れたログ管理システムは、
syslog
メッセージを自動的に解析し、エラー フィールドを抽出できます。また、クリックするだけで特定のエラーのログ メッセージをフィルタリングすることもできます。 は、エラー重大度を強調表示する
syslog
フィールドを表示し、エラー をフィルタリングしていることを示します。 Brothers IT Education のオリジナルの Linux 運用保守エンジニアのビデオ/詳細への無料アクセスLinux チュートリアルについては、公式 Web サイトのカスタマー サービスにお問い合わせください: http://www.lampbrother.net/linux/PHP、Linux、HTML5、UI、Android およびその他のビデオ チュートリアル (コースウェア + ノート + ビデオ) を学びましょう! Q2430675018 にお問い合わせください Linux コミュニケーション グループへの参加へようこそ グループ番号: 478068715
|