集中ログを改善するためのLogstashフィルターの追加
序章
Logstashは、ログを一元化および分析するための強力なツールであり、環境の概要と概要を提供し、サーバーの問題を特定するのに役立ちます。 ELKスタック(Elasticsearch、Logstash、Kibana)のセットアップの効果を高める1つの方法は、重要なアプリケーションログを収集し、フィルターを使用してログデータを構造化することです。これにより、データを簡単に分析してクエリを実行できます。 ログ内のデータを有用な情報に解析する「grok」パターンを中心にフィルターを構築します。
このガイドは、 Ubuntu 14.04 チュートリアルにElasticsearch、Logstash、およびKibana 4をインストールする方法の続編であり、主にさまざまな一般的なアプリケーションログにLogstashフィルターを追加することに焦点を当てています。
前提条件
このチュートリアルに従うには、Filebeatなどの配送業者からログを受信するLogstashサーバーが機能している必要があります。 ログを受信するようにLogstashを設定していない場合は、次のチュートリアルを開始できます: Ubuntu 14.04にElasticsearch、Logstash、およびKibana4をインストールする方法。
ELKサーバーの前提条件
- Logstashはにインストールされています
/opt/logstash
- Logstash構成ファイルは次の場所にあります。
/etc/logstash/conf.d
- 名前の付いた入力ファイルがあります
02-beats-input.conf
- 次の名前の出力ファイルがあります
30-elasticsearch-output.conf
を作成する必要があるかもしれません patterns
Logstashサーバーで次のコマンドを実行してディレクトリを作成します。
- sudo mkdir -p /opt/logstash/patterns
- sudo chown logstash: /opt/logstash/patterns
クライアントサーバーの前提
- 各アプリケーションサーバーで、syslog / auth.logをLogstashサーバーに送信するようにFilebeatを構成しました(前提条件のチュートリアルの Set Up Filebeatセクションのように)
設定が異なる場合は、環境に合わせてこのガイドを調整してください。
Grokについて
Grokは、テキストパターンを解析し、正規表現を使用して、それらを識別子に割り当てることで機能します。
grokパターンの構文は次のとおりです。 %{PATTERN:IDENTIFIER}
. Logstashフィルターには、ログメッセージのさまざまな部分をさまざまな識別子に一致させて割り当てる一連のgrokパターンが含まれています。これにより、ログに構造が与えられます。
grokの詳細については、LogstashgrokページおよびLogstashのデフォルトパターンリストにアクセスしてください。
このガイドの使用方法
これに続く各メインセクションには、特定のアプリケーションのログを収集およびフィルタリングするために必要な追加の構成の詳細が含まれます。 ログに記録してフィルタリングするアプリケーションごとに、クライアントサーバー(Filebeat)とLogstashサーバーの両方で構成を変更する必要があります。
Logstashパターンサブセクション
Logstash Patternsサブセクションがある場合は、で新しいファイルに追加できるgrokパターンが含まれます。 /opt/logstash/patterns
Logstashサーバー上。 これにより、Logstashフィルターで新しいパターンを使用できるようになります。
Logstashフィルターサブセクション
Logstash Filterサブセクションには、入力構成ファイルと出力構成ファイルの間で、新しいファイルに追加できるフィルターが含まれます。 /etc/logstash/conf.d
Logstashサーバー上。 フィルタは、Logstashサーバーが関連するログファイルを解析する方法を決定します。 新しいフィルターを追加した後、変更をロードするためにLogstashサービスを再起動することを忘れないでください。
Filebeatプロスペクターサブセクション
Filebeat Prospectorsは、Logstashに送信するログを指定するために使用されます。 追加のプロスペクター構成をに追加する必要があります /etc/filebeat/filebeat.yml
の既存のプロスペクターの直後にファイルする prospectors
セクション:
filebeat:
# List of prospectors to fetch data.
prospectors:
-
- /var/log/secure
- /var/log/messages
document_type: syslog
-
paths:
- /var/log/app/*.log
document_type: app-access
...
上記の例では、赤で強調表示された線は、すべての .log
のファイル /var/log/app/
Logstashに app-access
タイプ。 変更を加えた後、変更を有効にするには、Filebeatをリロードする必要があります。
このガイドの使用方法がわかったので、ガイドの残りの部分では、アプリケーションログを収集してフィルタリングする方法を説明します。
アプリケーション:Nginx
Logstashパターン:Nginx
NginxログパターンはLogstashのデフォルトパターンに含まれていないため、Nginxパターンを手動で追加します。
ELKサーバーで、という新しいパターンファイルを作成します。 nginx
:
- sudo vi /opt/logstash/patterns/nginx
次に、次の行を挿入します。
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}
保存して終了。 The NGINXACCESS
パターンは解析し、データをさまざまな識別子に割り当てます(例: clientip
, ident
, auth
など)。
次に、パターンファイルの所有権を次のように変更します。 logstash
:
- sudo chown logstash: /opt/logstash/patterns/nginx
Logstashフィルター:Nginx
ELKサーバーで、という新しいフィルター構成ファイルを作成します。 11-nginx-filter.conf
:
- sudo vi /etc/logstash/conf.d/11-nginx-filter.conf
次に、次のフィルターを追加します。
filter {
if [type] == "nginx-access" {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
}
}
保存して終了。 このフィルターは、 nginx-access
で入力する NGINXACCESS
上記で定義されたパターン。
次に、Logstashを再起動して、構成を再ロードします。
- sudo service logstash restart
Filebeat Prospector:Nginx
Nginxサーバーで、 filebeat.yml
編集用の構成ファイル:
- sudo vi /etc/filebeat/filebeat.yml
次のプロスペクターをに追加します filebeat
Nginxアクセスログをタイプとして送信するセクション nginx-access
Logstashサーバーへ:
-
paths:
- /var/log/nginx/access.log
document_type: nginx-access
保存して終了。 Filebeatをリロードして、変更を有効にします。
- sudo service filebeat restart
これで、Nginxログが収集され、フィルタリングされます。
アプリケーション:ApacheHTTPWebサーバー
ApacheのログパターンはデフォルトのLogstashパターンに含まれているため、フィルターを設定するのはかなり簡単です。
注: CentOSなどのRedHatバリアントを使用している場合、ログは次の場所にあります。 /var/log/httpd
それ以外の /var/log/apache2
、例で使用されています。
Logstashフィルター:Apache
ELKサーバーで、という新しいフィルター構成ファイルを作成します。 12-apache.conf
:
- sudo vi /etc/logstash/conf.d/12-apache.conf
次に、次のフィルターを追加します。
filter {
if [type] == "apache-access" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
}
保存して終了。 このフィルターは、 apache-access
で入力する COMBINEDAPACHELOG
パターン、デフォルトのLogstashパターンの1つ。
次に、Logstashを再起動して、構成を再ロードします。
- sudo service logstash restart
Filebeat Prospector:Apache
Apacheサーバーで、 filebeat.yml
編集用の構成ファイル:
- sudo vi /etc/filebeat/filebeat.yml
次のプロスペクターをに追加します filebeat
タイプとしてApacheログを送信するセクション apache-access
Logstashサーバーへ:
-
paths:
- /var/log/apache2/access.log
document_type: apache-access
保存して終了。 Filebeatをリロードして、変更を有効にします。
- sudo service filebeat restart
これで、Apacheログが収集され、フィルタリングされます。
結論
ほぼすべてのタイプのログを収集して解析することが可能です。 他のログファイル用に独自のフィルターとパターンを作成してみてください。
見たいフィルターや独自のパターンでコメントしてください!
Kibanaの使用に慣れていない場合は、次のチュートリアルを確認してください:Kibanaの視覚化とダッシュボードの使用方法。