DockerのELK

Elasticsearch、Logstash、Kibanaを使用してログを収集および分析することについて多くの人が読んだと思いますが、多くの場合、記事はELKサービスを上げて連携させる方法に関する長いマニュアルから始まります。

ここでは、Dockerを使用したクイックスタートについて説明します。



この記事は、すでにDockerに精通しており、レビューや製品での将来の使用のためにELKスタックを上げることを望んでいる人を対象としています。 ELKが必要かどうかわからない場合は、Kibana-motherの記事を読むか、ログが必要なのはなぜですか?



したがって、理想的には、タスクはhub.docker.comでELKを含むコンテナを見つけて実行することです。 私はいくつかの修正を加えてそうすることを提案します。 この例では、nginxログをelasticSearchに送信することを検討してください。



ELKサービスの略語には、次のタスクが含まれます。

1)受信データを処理してElasticsearchに配信-Logstashサービスがこれを担当します

2)検索エンジンとデータアクセスインターフェイス-ElasticsearchとKibanaがこれを担当します



ただし、Logstashはデータの配信について責任を負うべきではありません。 データ配信を4番目のサービスFilebeatに委任します。



一般的な作業スキームは次のとおりです。



画像



ネットワークには、データを収集する必要があるサービスの数が異なる場合があり、FilebeatはLogstashのログプロバイダーです。



つまり、Filebeatサービスで別のコンテナーを取得する必要があるという事実につながります。



ビジネスに取り掛かろう。 Docker Composeサービスを使用することを強くお勧めします。1つのYAMLファイルにパラメーターを記述することは、毎回パラメーターを指定してコマンドを実行するよりもはるかに便利です。 また、デバッグ段階では、1回以上開始および停止する必要があります。



1. myElkなどのプロジェクトでフォルダーを作成し、そこにdocker-compose.ymlという名前のファイルを作成します。これは補足します。



2. filebeatを使用してコンテナを検索します。 このolinicola / filebeatまたはdocker pull olinicola / filebeatをお勧めします

filebeatを使用してコンテナを設定するには、filebeatサービス用にYAML形式の構成ファイルを準備します。

私たちの場合、次のようになります。



prospectors: - paths: - "/etc/logs/nginx/access.log" document_type: nginx-access - paths: - "/var/log/nginx/error.log" document_type: nginx-error output: logstash: hosts: ["elk:5044"] tls: certificate_authorities: - /etc/pki/tls/certs/logstash-beats.crt timeout: 15 file: path: "/tmp/filebeat"
      
      







つまり、特定のサーバーの場所からnginxログを取得し、ELKサーバーに送信します。ELKサーバーは、ポート5044でメッセージを受信する準備ができています。

この構成ファイルでは、「elk」(リンクされたコンテナーの名前)の詳細を以下に示します。

また、起動段階でのデバッグをより便利にするために、ファイルへのアップロードも示しました。



この時点で、次のコードでdocker-compose.ymlをすでに補完できます。



 version: '2' services: filebeat: build: . image: [ imageId  filebeat] volumes: - /path/to/myElk/log/nginx:/etc/logs/nginx #  nginx - /path/to/myElk/filebeat:/etc/filebeat - /path/to/myElk/filebeat/tmp:/tmp/filebeat
      
      







docker-compose upコマンドを使用して、コンテナの持ち上げを開始できます。 また、access.logファイルを変更すると、データがファイル「/ tmp / filebeat」に送信される方法を確認します。この段階ではまだelkコンテナーが存在しないため、出力logstashをコメント化することをお勧めします。



3. OK、filebeatを持つ最初のコンテナを取得しました。 ここで、ELKを備えた2番目のコンテナが必要です。 hub.docker.comに移動してsebp / elkを見つけるか、docker pull sebp / elkコマンドを実行します。



ELKコンテナーの構成。

ここで設定する必要があるのはlogstashだけです。2つのオプションがあります。a)このコンテナのlogstashはnginxサーバーログを受信するように既に設定されているため、すべてをそのままにして動作します。

ただし、開始後、パスb)に従う必要があります。つまり、必要に応じてログを構成します。 ログがelasticsearchに転送される方法から、nginxからのデータを分析することは多かれ少なかれ便利だからです。

そこで、logstash構成ファイルについて説明します。 関心のあるログファイルは次のとおりです。

入力パラメーター:

02-beats-input.conf-触れる必要はありません



 input { beats { port => 5044 ssl => true ssl_certificate => "/etc/pki/tls/certs/logstash-beats.crt" ssl_key => "/etc/pki/tls/private/logstash-beats.key" } }
      
      







ここで、サービスがポート5044でデータを受信する準備ができていることがわかります。

出力パラメーター:

30-output.conf-触れる必要はありません



 output { elasticsearch { hosts => ["localhost"] sniffing => true manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } stdout { codec => rubydebug } }
      
      







最も興味深いのは、データ変換です。 デフォルトでは、11-nginx.confファイルは次のようになります



 filter { if [type] == "nginx-access" { grok { match => { "message" => "%{NGINXACCESS}" } } } }
      
      







ただし、NGINXACCESSテンプレートを十分に使用した後、必要に応じてログを正確に処理することをお勧めします。

これを行うには、フィルターセクションを変更する必要があります。 いくつかのパラメータが存在する可能性があります-ここで非常によく説明されていますLogstashを使用してログを収集、解析、提供します

私は、次のサービスがgrokフィルターのデバッグに適していることを追加したいと思います。Grok Debugger



3. 2つのコンテナのレイアウト。



ここでは、Docker Composeサービスを使用することを強くお勧めします。1つのYAMLファイルにパラメーターを記述することは、毎回パラメーターを指定してコマンドを実行するよりもはるかに便利です。 また、デバッグ段階では、1回以上開始および停止する必要があります。

これを行うには、プロジェクトを含むフォルダー(myElkなど)を作成し、次の名前docker-compose.ymlと、たとえば次の内容のファイルを作成する必要があります。



 version: '2' services: filebeat: build: . image: [ imageId  filebeat] volumes: - /path/to/myElk/log/nginx:/etc/logs/nginx #  nginx - /path/to/myElk/filebeat:/etc/filebeat - /path/to/myElk/filebeat/tmp:/tmp/filebeat - /path/to/myElk/filebeat/certs:/etc/pki/tls/certs links: - "elk" depends_on: - "elk" #entrypoint: ./time-to-start.sh elk: image: [ imageId  elk] ports: - "5601:5601" #kibana - "9200:9200" #elastic - "5044:5044" #logstash beats filebeat
      
      







この構成ファイルは、2つのコンテナーとそれらの関係、およびt

コンテナを起動してみて、すべてが正常であれば、localhost:5601で最初のインデックスを選択する必要がある最初のKibanaページが表示されます。これはfilebeat- [date]のように形成され、filebeatと入力し、データが到着し始めたら生成されます自動的に。



Macでdockerを実行する場合は、ホストマシンでlocalhost:5601を使用できるように、VirtualBoxポート転送を介してポートをさらに転送する必要があります。



All Articles