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

推薦する

vue+elementui+vuex+sessionStorage を使用して履歴タグ メニューを実装するためのサンプル コード

一般的には、左側にメニューがあった後、ページの上部に履歴タブ メニューを追加する必要があります。他の...

MySQLのINサブクエリによってインデックスが使用できなくなる問題を解決する

今日は、MySQL IN サブクエリの最適化に関するケーススタディを見ました。最初は少し懐疑的でした...

グループ化されたクエリでのGROUP BYの使用とSQL実行順序の説明

SQL では、GROUP BY は SELECT の結果のデータをグループ化するために使用されます。...

MySQLデータベースでサポートされているストレージエンジンの比較

目次ストレージエンジンMySQL でサポートされているストレージ エンジン同時実行制御ロック粒子をロ...

Linux でのマルチスレッドプログラミング例の分析

1 はじめにスレッド技術は 1960 年代にすでに提案されていましたが、マルチスレッドがオペレーティ...

MySQL InnoDB テーブルスペース暗号化の例の詳細な説明

序文MySQL 5.7.11 以降、MySQL は、別の表領域に格納された InnoDB テーブルの...

TypeScript の基本型の紹介

目次1. 基本タイプ2. オブジェクトタイプ2.1 配列2.2 タプル2.3 オブジェクト3. 型推...

複数の値を返す MySQL ストアド プロシージャ メソッドの例

この記事では、例を使用して、MySQL ストアド プロシージャで複数の値を返す方法について説明します...

Linux システム Docker への ASP.NET Core アプリケーションのデプロイのプロセス分析

目次1. システム環境2. 運用プロセスと途中で遭遇した問題1. システム環境1. Tencent ...

CSS で平均レイアウトを実現するために負のマージンを使用する例

均等に分散されたレイアウトの場合、通常はネガティブ マージン方式を使用します。次の図は平均的なレイア...

CSS でフッターの「下部吸収」効果を実現

よく遭遇する問題: 下部の要素を「下部に貼り付ける」効果を CSS でどのように実現するか。この記事...

VMware で Centos7 ブリッジ ネットワークを構成する手順の詳細な説明

VMware仮想マシンでのCentos7ブリッジネットワーク構成の完全な手順は参考用です。具体的な内...

HTML で JavaScript を使用する

<script> タグHTML5では、スクリプトには次の属性があります: async、d...

MySQL準備原理の詳細な説明

準備のメリットPrepare SQL が生成される理由。まず、MySQL サーバー上で SQL を実...

MySQL ファジークエリの使用法 (通常、ワイルドカード、組み込み関数)

目次1. MySQL ワイルドカード ファジー クエリ (%,_) 1-1. ワイルドカードの分類1...