ここでは、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ポート転送を介してポートをさらに転送する必要があります。