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を使用してテキストの垂直配置を実現する方法

推薦する

Vue3 はメッセージコンポーネントの例を実装します

目次コンポーネント設計最終的なコンポーネントAPIの定義コンポーネント構造の定義テンプレートとスタイ...

Vueバインディングオブジェクトと配列変数を変更した後にレンダリングできない問題の解決策

プロジェクトシナリオ:ページ表示には <ul> タグがあります。リストデータを動的に表示...

js の関数の長さはどれくらいですか?

目次序文なぜいくらですか?パラメータの数デフォルトパラメータ残りのパラメータ要約する序文今日は関数の...

Zabbix ベースの Jenkins プロセス監視の詳細な説明

1. 監視アーキテクチャ図 2. 実装のアイデアJenkins に Metrics プラグインをイン...

JavaScriptプロトタイプチェーンの詳細な説明

目次1. コンストラクタとインスタンス2. プロパティプロトタイプ3. プロパティ __proto_...

ネイティブJSでマウススライドによる愛の拡散効果を実現

この記事では、マウスをスライドすると愛が広がる js 特殊効果を紹介します。効果は次のとおりです。 ...

JSは写真の自動再生効果を実現します

この記事では、写真の自動再生効果を実現するためのJSの具体的なコードを参考までに紹介します。具体的な...

シンプルなウェブ計算機を実装するJavaScript

背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...

html-webpack-plugin の使用方法の詳細な説明

最近、React プロジェクトで初めてhtml-webapck-pluginプラグインを使用しました...

MySQL ストレージ エンジンの基礎

前回の記事では、MySQL トランザクションについて説明しました。これで、MySQL トランザクショ...

MySQL スロークエリログの基本的な使い方チュートリアル

スロークエリログ関連のパラメータMySQL スロー クエリ関連のパラメータの説明: slow_que...

Vue + 要素を使用して背景データをオプションに動的に表示する

必要:ハードコードされたデータの代わりに、セレクター内のオプション値の動的な表示を実装します。私のロ...

Tomcat のセッションと Cookie の詳細な説明

序文HTTP はステートレスな通信プロトコルです。各リクエストは互いに独立しており、サーバーは以前の...

MySQL MGR の利点は何ですか?

MGR (MySQL グループ レプリケーション) は、バージョン 5.7 で追加された新しい機能...

Node.js を使用して png 画像に透明なピクセルがあるかどうかを判断する方法

背景PNG 画像は jpg 画像よりも多くのストレージスペースを占有しますが、PNG 画像の品質は大...