序章

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という名前の出力ファイルがあります

Logstashサーバーで次のコマンドを実行して、patternsディレクトリを作成する必要がある場合があります。

  1. sudo mkdir -p /opt/logstash/patterns
  2. 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パターンのサブセクションがある場合は、Logstashサーバーの/opt/logstash/patternsの新しいファイルに追加できるgrokパターンが含まれます。 これにより、Logstashフィルターで新しいパターンを使用できるようになります。

Logstashフィルターサブセクション

Logstash Filterサブセクションには、Logstashサーバーの/etc/logstash/conf.dで、入力構成ファイルと出力構成ファイルの間の新しいファイルに追加できるフィルターが含まれます。 フィルタは、Logstashサーバーが関連するログファイルを解析する方法を決定します。 新しいフィルターを追加した後、変更をロードするためにLogstashサービスを再起動することを忘れないでください。

Filebeatプロスペクターサブセクション

Filebeat Prospectorsは、Logstashに送信するログを指定するために使用されます。 追加のプロスペクター構成は、prospectorsセクションの既存のプロスペクターの直後に/etc/filebeat/filebeat.ymlファイルに追加する必要があります。

プロスペクターの例
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
...

上記の例では、赤い強調表示された線は、/var/log/app/内のすべての.logファイルをapp-accessタイプでLogstashに送信するプロスペクターを表しています。 変更を加えた後、変更を有効にするには、Filebeatをリロードする必要があります。

このガイドの使用方法がわかったので、ガイドの残りの部分では、アプリケーションログを収集してフィルタリングする方法を説明します。

アプリケーション:Nginx

Logstashパターン:Nginx

NginxログパターンはLogstashのデフォルトパターンに含まれていないため、Nginxパターンを手動で追加します。

ELKサーバーで、nginxという名前の新しいパターンファイルを作成します。

  1. sudo vi /opt/logstash/patterns/nginx

次に、次の行を挿入します。

NginxGrokパターン
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}

保存して終了。 NGINXACCESSパターンは解析し、データをさまざまな識別子に割り当てます(例: clientipidentauthなど)。

次に、パターンファイルの所有権をlogstashに変更します。

  1. sudo chown logstash: /opt/logstash/patterns/nginx

Logstashフィルター:Nginx

ELKサーバーで、11-nginx-filter.confという名前の新しいフィルター構成ファイルを作成します。

  1. sudo vi /etc/logstash/conf.d/11-nginx-filter.conf

次に、次のフィルターを追加します。

Nginxフィルター
filter {
  if [type] == "nginx-access" {
    grok {
      match => { "message" => "%{NGINXACCESS}" }
    }
  }
}

保存して終了。 このフィルターは、nginx-accessタイプのメッセージを上記で定義されたNGINXACCESSパターンと一致させようとすることに注意してください。

次に、Logstashを再起動して、構成を再ロードします。

  1. sudo service logstash restart

Filebeat Prospector:Nginx

Nginxサーバーで、filebeat.yml構成ファイルを開いて編集します。

  1. sudo vi /etc/filebeat/filebeat.yml

filebeatセクションに次のプロスペクターを追加して、Nginxアクセスログをタイプnginx-accessとしてLogstashサーバーに送信します。

Nginxプロスペクター
    -
      paths:
        - /var/log/nginx/access.log
      document_type: nginx-access

保存して終了。 Filebeatをリロードして、変更を有効にします。

  1. sudo service filebeat restart

これで、Nginxログが収集され、フィルタリングされます。

アプリケーション:ApacheHTTPWebサーバー

ApacheのログパターンはデフォルトのLogstashパターンに含まれているため、フィルターを設定するのはかなり簡単です。

注: CentOSなどのRedHatバリアントを使用している場合、ログは、例で使用されている/var/log/apache2ではなく/var/log/httpdにあります。

Logstashフィルター:Apache

ELKサーバーで、12-apache.confという名前の新しいフィルター構成ファイルを作成します。

  1. sudo vi /etc/logstash/conf.d/12-apache.conf

次に、次のフィルターを追加します。

Apacheフィルター
filter {
  if [type] == "apache-access" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
  }
}

保存して終了。 このフィルターは、apache-accessタイプのメッセージをCOMBINEDAPACHELOGパターン(デフォルトのLogstashパターンの1つ)と一致させようとすることに注意してください。

次に、Logstashを再起動して、構成を再ロードします。

  1. sudo service logstash restart

Filebeat Prospector:Apache

Apacheサーバーで、filebeat.yml構成ファイルを開いて編集します。

  1. sudo vi /etc/filebeat/filebeat.yml

filebeatセクションに次のプロスペクターを追加して、Apacheログをタイプapache-accessとしてLogstashサーバーに送信します。

Apacheプロスペクター
    -
      paths:
        - /var/log/apache2/access.log
      document_type: apache-access

保存して終了。 Filebeatをリロードして、変更を有効にします。

  1. sudo service filebeat restart

これで、Apacheログが収集され、フィルタリングされます。

結論

ほぼすべてのタイプのログを収集して解析することができます。 他のログファイル用に独自のフィルターとパターンを作成してみてください。

見たいフィルターや独自のパターンでコメントしてください!

Kibanaの使用に慣れていない場合は、次のチュートリアルを確認してください:Kibanaの視覚化とダッシュボードの使用方法