Docker Compose ワンクリック ELK デプロイ方式の実装

Docker Compose ワンクリック ELK デプロイ方式の実装

インストール

Filebeat は、より軽量でより安全なため、Logstash-Forwarder に完全に取って代わり、新世代のログ コレクターになりました。 Filebeat + ELK に基づく展開ソリューションのアーキテクチャ図は次のとおりです。

ソフトウェアバージョン:

仕えるバージョン例示する
セントOS 7.6
ドッカー18.09.5
Docker の作成1.25.0
エルク7.5.1
ファイルビート7.5.1

docker-compose ファイル

バージョン: "3"
サービス:
 esマスター:
  コンテナ名: es-master
  ホスト名: es-master
  画像: elasticsearch:7.5.1
  再起動: 常に
  ポート:
   - 9200:9200
   - 9300:9300
  ボリューム:
   - ./elasticsearch/master/conf/es-master.yml:/usr/share/elasticsearch/config/elasticsearch.yml
   - ./elasticsearch/master/data:/usr/share/elasticsearch/data
   - ./elasticsearch/master/logs:/usr/share/elasticsearch/logs
  環境:
   - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

 es-slave1:
  コンテナ名: es-slave1
  画像: elasticsearch:7.5.1
  再起動: 常に
  ポート:
   - 9201:9200
   - 9301:9300
  ボリューム:
   - ./elasticsearch/slave1/conf/es-slave1.yml:/usr/share/elasticsearch/config/elasticsearch.yml
   - ./elasticsearch/slave1/data:/usr/share/elasticsearch/data
   - ./elasticsearch/slave1/logs:/usr/share/elasticsearch/logs
  環境:
   - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

 es-スレーブ2:
  コンテナ名: es-slave2
  画像: elasticsearch:7.5.1
  再起動: 常に
  ポート:
   - 9202:9200
   - 9302:9300
  ボリューム:
   ./elasticsearch/slave2/conf/es-slave2.yml:/usr/share/elasticsearch/config/elasticsearch.yml
   - ./elasticsearch/slave2/data:/usr/share/elasticsearch/data
   ログファイル
  環境:
   - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

 キバナ:
  コンテナ名: kibana
  ホスト名: kibana
  画像: kibana:7.5.1
  再起動: 常に
  ポート:
   -5601:5601
  ボリューム:
   ./kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml を参照してください。
  環境:
   - elasticsearch.hosts=http://es-master:9200
  依存:
   -es-マスター
   -es-スレーブ1
   -es-スレーブ2

 # ファイルビート:
 # # コンテナ名 # container_name: filebeat
 # # ホスト名 # ホスト名: filebeat
 # # イメージ: docker.elastic.co/beats/filebeat:7.5.1
 # # 再起動メカニズム# restart: always
 # # 永続マウント # ボリューム:
 # - ./filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml
 ## コンテナにマッピングされる [データソースとして]
 # - ./logs:/home/project/spring-boot-elasticsearch/logs
 # - ./filebeat/logs:/usr/share/filebeat/logs
 # - ./filebeat/data:/usr/share/filebeat/data
 # # 指定されたコンテナを現在の接続に接続します。IP アドレスの動的な変更によりコンテナを接続できない状況を回避するためにエイリアスを設定できます。# リンク:
 # - ログスタッシュ
 # # 依存サービス [オプション]
 # 依存:
 # - esマスター
 # - es-slave1
 # - es-スレーブ2

 ログスタッシュ:
  コンテナ名: logstash
  ホスト名: logstash
  イメージ: logstash:7.5.1
  コマンド: logstash -f ./conf/logstash-filebeat.conf
  再起動: 常に
  ボリューム:
   # コンテナへのマッピング - ./logstash/conf/logstash-filebeat.conf:/usr/share/logstash/conf/logstash-filebeat.conf
   ./logstash/ssl:/usr/share/logstash/ssl
  環境:
   - elasticsearch.hosts=http://es-master:9200
   # logstash モニタリング接続エラーを解決する - xpack.monitoring.elasticsearch.hosts=http://es-master:9200
  ポート:
   -5044:5044
  依存:
   -es-マスター
   -es-スレーブ1
   -es-スレーブ2

ここではFilebeatがコメントアウトされており、ログを収集する必要がある各サーバーにFilebeat個別に展開される予定です。

Elasticsearchデータとログにはchmod 777を設定することを忘れないでください

es-マスター.yml

# クラスター名 cluster.name: es-cluster
#ノード名node.name: es-master
# マスターノードになれるかどうかnode.master: true
# ノードがデータを保存できるようにするかどうか。デフォルトで有効です。node.data: false
# ネットワークバインディング network.host: 0.0.0.0
# 外部サービスのhttpポートを設定します http.port: 9200
# ノード間の通信用のTCPポートを設定します transport.port: 9300
# クラスター検出 discovery.seed_hosts:
 -es-マスター
 -es-スレーブ1
 -es-スレーブ2
# マスターノードになることができるすべてのノードの名前または IP アドレスを手動で指定します。これらの構成は最初の選出 cluster.initial_master_nodes で計算されます。
 -es-マスター
# クロスドメインアクセスをサポートする http.cors.enabled: true
http.cors.allow-origin: "*"
# セキュリティ認証 xpack.security.enabled: false
#http.cors.allow-headers: 「認証」

es-slave1.yml

# クラスター名 cluster.name: es-cluster
#ノード名node.name: es-slave1
# マスターノードになれるかどうかnode.master: true
# ノードがデータを保存できるようにするかどうか。デフォルトで有効です。node.data: true
# ネットワークバインディング network.host: 0.0.0.0
# 外部サービスのhttpポートを設定します http.port: 9201
# ノード間の通信用のTCPポートを設定します #transport.port: 9301
# クラスター検出 discovery.seed_hosts:
 -es-マスター
 -es-スレーブ1
 -es-スレーブ2
# マスターノードになることができるすべてのノードの名前または IP アドレスを手動で指定します。これらの構成は最初の選出 cluster.initial_master_nodes で計算されます。
 -es-マスター
#クロスドメインアクセスをサポートする http.cors.enabled: true
http.cors.allow-origin: "*"
# セキュリティ認証 xpack.security.enabled: false
#http.cors.allow-headers: 「認証」

es-slave2.yml

# クラスター名 cluster.name: es-cluster
#ノード名node.name: es-slave2
# マスターノードになれるかどうかnode.master: true
# ノードがデータを保存できるようにするかどうか。デフォルトで有効です。node.data: true
# ネットワークバインディング network.host: 0.0.0.0
# 外部サービスのhttpポートを設定します http.port: 9202
# ノード間の通信用のTCPポートを設定します #transport.port: 9302
# クラスター検出 discovery.seed_hosts:
 -es-マスター
 -es-スレーブ1
 -es-スレーブ2
# マスターノードになることができるすべてのノードの名前または IP アドレスを手動で指定します。これらの構成は最初の選出 cluster.initial_master_nodes で計算されます。
 -es-マスター
# クロスドメインアクセスをサポートする http.cors.enabled: true
http.cors.allow-origin: "*"
# セキュリティ認証 xpack.security.enabled: false
#http.cors.allow-headers: 「認証」

ログスタッシュファイルビート.conf

入力{
  # ソースビート
  ビート {
    # ポート port => "5044"
    ssl_certificate_authorities => ["/usr/share/logstash/ssl/ca.crt"]
    ssl_certificate => "/usr/share/logstash/ssl/server.crt"
    ssl_key => "/usr/share/logstash/ssl/server.key"
    ssl_verify_mode => "force_peer"
  }
}
# 分析およびフィルタリングプラグイン、複数のフィルタが可能 {
  理解する {
    一致 => { "メッセージ" => "%{COMBINEDAPACHELOG}"}
  }
  ジオIP
    ソース => "clientip"
  }
}
出力{
  # elasticsearchを選択
  エラスティックサーチ
    ホスト => ["http://es-master:9200"]
    インデックス => "%{[fields][service]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

ファイルビート.yml

ファイルビート入力:
 - タイプ: ログ
  有効: true
  パス:
   # 現在のディレクトリ内のすべての .log ファイル - /root/tmp/logs/*.log
  フィールド:
   サービス: "our31-java"
  複数行パターン: ^\[
  複数行否定: true
  複数行一致: 後
 - タイプ: ログ
  有効: true
  パス:
   # 現在のディレクトリ内のすべての .log ファイル - /root/tmp/log/*.log
  フィールド:
   サービス: "our31-nginx"

filebeat.config.モジュール:
 パス: ${path.config}/modules.d/*.yml
 リロードが有効: false

# セットアップテンプレート設定:
# インデックスのシャード数: 1

# セットアップダッシュボードが有効: false

# セットアップ.kibana:
# ホスト: "http://localhost:5601"

# ESに直接転送されない
#出力.elasticsearch:
# ホスト: ["http://es-master:9200"]
# インデックス: "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"

セットアップ.ilm.enabled: false

出力.logstash:
 ホスト: ["logstash.server.com:5044"]
 
 # オプションの SSL。デフォルトではオフになっています。
 # HTTPS サーバー検証用のルート証明書のリスト
 ssl.certificate_authorities: "./ssl/ca.crt"
 # SSLクライアント認証用の証明書
 ssl.証明書: "./ssl/client.crt"
 # クライアント証明書キー
 ssl.key: 「./ssl/client.key」

# プロセッサ:
# - ホストメタデータを追加: ~
# - クラウドメタデータを追加: ~

知らせ

証明書を生成し、SSL を構成し、Filebeat と Logstash の間で SSL を確立します。

#CA 秘密鍵を生成する openssl genrsa 2048 > ca.key
 
#CA 秘密キーを使用して CA 証明書を作成します openssl req -new -x509 -nodes -key ca.key -subj /CN=elkCA\ CA/OU=Development\ group/O=HomeIT\ SIA/DC=elk/DC=com > ca.crt
 
# サーバー csr 証明書要求ファイルを生成します openssl req -newkey rsa:2048 -nodes -keyout server.key -subj /CN=logstash.server.com/OU=Development\ group/O=Home\ SIA/DC=elk/DC=com > server.csr
 
#CA 証明書と秘密鍵を使用してサーバー証明書を発行します openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 > server.crt
 
# クライアント csr 証明書要求ファイルを生成します openssl req -newkey rsa:2048 -nodes -keyout client.key -subj /CN=filebeat.client.com/OU=Development\ group/O=Home\ SIA/DC=elk/DC=com > client.csr
 
#CA 証明書と秘密鍵を使用してクライアント証明書を発行します openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 > client.crt

証明書を対応するフォルダに置くことを忘れないでください。

Filebeat のoutput.logstash.hostsで設定されたドメイン名は証明書と一致する必要があります。

異なるサーバー、異なるサービス、異なる日付に基づいてインデックスを動的に生成します

上の図では、いくつかのカスタム属性が追加されています。これらの属性は Logstash に渡され、Logstash はこれらの属性を取得して、以下に示すように Elasticsearch に動的にインデックスを作成します。

詳細な紹介については、公式ドキュメント、メタデータ、および動的インデックス生成を参照してください。

もともと、インデックスを使用してここで動的にインデックスを生成したいと思っていましたが、公式の設定によると、成功しませんでした。理由を教えていただけますか?

Nginx Http Basic認証を使用してKibanaにログインを要求する

まず、 htpasswdツールを使用してユーザー情報を生成します

$ yum -y httpd-toolsをインストールします

新しいパスワードファイルを作成する

新しいパスワードファイルを作成する

追加のユーザー情報:

ユーザー情報を追加する

最後に、Nginx を設定します。

サーバー{
  ......
  
  auth_basic "Kibana 認証";
  auth_basic_user_file /usr/local/nginx/pwd/kibana/passwd;
  
  ......
}

Filebeatを個別に起動する方法

$ nohup ./filebeat 2>&1 &

Docker Composeを起動する

docker-compose.ymlが配置されているディレクトリで実行します。

$ docker-compose アップ --build -d

Docker Compose によるワンクリック ELK デプロイメントの実装に関するこの記事はこれで終わりです。Docker Compose ELK デプロイメントの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker-compose チュートリアルのインストールとクイックスタート
  • Docker Compose は MySQL に接続するために SpringBoot プロジェクトをデプロイしますが、そこで遭遇する落とし穴があります。
  • Docker Composeでコンテナ管理の問題を解決する
  • Docker Compose のインストールと使用手順
  • Docker Compose の実践とまとめ
  • docker compose helloworld を使い始めるための詳細なプロセス

<<:  初心者がHTMLタグを学ぶ(2)

>>:  CSS3を使用してテキストの垂直配置を実現する方法

推薦する

CSS でデフォルトのスタイルをクリアし、共通のスタイルを設定する方法

CSS デフォルトスタイルをクリア通常の明確なデフォルト スタイル: *{ マージン:0; パディン...

MySQL バッチ挿入とユニークインデックスの問題に対する解決策

MySQL バッチ挿入の問題プロジェクトを開発しているときに、古いシステムの基本データを事前にインポ...

Vueは適切なスライドアウトレイヤーアニメーションを実装します

この記事では、適切なスライドアウトレイヤーアニメーションを実装するためのVueの具体的なコードを例と...

React Fragment の紹介と詳しい使い方

目次序文フラグメントの動機React Fragment の紹介と使用<React.Fragme...

React Native環境のインストールプロセス

react-native インストールプロセス1.npx react-native init Awe...

Linux で yum と入力した後に -bash: /usr/bin/yum: No such file or directory という問題を解決する方法

Linuxでyumを入力すると、プロンプトが表示されます: -bash: /usr/bin/yum:...

MySQL 5.5.56 インストール不要版の設定方法

MySQL 5.5.56無料インストール版の設定方法をテキストコードで詳しく説明します。具体的な内容...

jsシミュレーションでJingdongの詳細ページで画像を拡大する効果を実現

この記事では、Jingdongの詳細ページの画像の拡大を実現するためのjsの具体的なコードを紹介しま...

Vueプロジェクトでlessを使用するためのヒント

目次序文1. スタイルの浸透1. パターン浸透とは何ですか? 2. 使い方は? 2. ミキシング1....

HTML webpackプラグインの使用に関する簡単な分析

html-webpack-pluginプラグインを使用してページを開始すると、htmlページをメモリ...

VMware 仮想マシンの 3 つの接続方法の例の分析

NATこのようにして、仮想マシンのネットワーク カードはホストの VMnet8 に接続されます。この...

Linux trコマンドの使い方

01. コマンドの概要tr コマンドは、標準入力からの文字を置換、圧縮、削除できます。ある文字セット...

MySQL データをエクスポートする際の secure-file-priv 問題の解決方法

エラー 1290 (HY000) : MySQL サーバーは –secure-file-priv オ...

Dockerは異常なコンテナ操作を排除する

この初心者は、Docker を学び始めたばかりの頃にこのような問題に遭遇しました。記録しておきます。...

クールな点滅アラームボタンをおすすめします

効果は以下のとおりです。 コードは次のとおりです (クリックすると展開してソース コードが表示されま...