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

推薦する

Nodejs 配列キューと forEach アプリケーションの詳細な説明

この記事では、Nodejs 開発プロセスで遭遇する配列の特性によって発生する問題と解決策、および配列...

HTMLを圧縮しない理由はいくつかある

理由は簡単です。 HTML ドキュメントでは、複数の空白文字は 1 つの空白文字と同等です。つまり、...

geoip を使用して nginx で地域を制限する方法

このブログは仕事のメモです環境: nginx バージョン: nginx/1.14.0 Centos ...

CentOS 7 構成 Tomcat9+MySQL ソリューション

Tomcatの設定まずTomcatをインストールするTomcatのインストールは、Tomcatのイン...

MYSQL ロック解除とロックテーブルの紹介

MySQL ロックの概要他のデータベースと比較すると、MySQL のロック メカニズムは比較的単純で...

nginx でのリクエストのカウント追跡の簡単な分析

まずは適用方法を説明します。nginxモジュールにはjtxyとjtcmdの2つがあります。 http...

HTMLの基礎 HTMLの構造

HTML ファイルとは何ですか? HTML は Hyper Text Markup Language...

VS2019をMySQLデータベースに接続するプロセスと一般的な問題の概要

今日の午後からVS2019をMySQLで使えるのではないかと思い、いろいろ環境構築を始めました。プロ...

初心者向けMySQLシリーズチュートリアル

目次1. 基本概念と基本コマンド1) 基本的な概念2) 基本コマンド2. SQL文の記述順序と実行順...

純粋な CSS を使用して脈動するローダー効果のソースコードを作成する

効果プレビュー右側の「クリックしてプレビュー」ボタンを押すと現在のページでプレビューが表示され、リン...

React Hooks に基づく小さな状態管理の詳細な説明

目次React Hooks に基づく状態共有の実装ユーザーエクスペリエンスこの記事では、主に Rea...

システム CD をマウントして yum ウェアハウスを構築する VMware 15.5 バージョンのグラフィック チュートリアル

1. CentOS 7 仮想マシンを開きます。 2. 仮想マシンにログインし、リストにないユーザー名...

SQL実装 LeetCode (176. 2番目に高い給与)

[LeetCode] 176. 2番目に高い給与従業員テーブルから 2 番目に高い給与を取得する ...

ウェブデザインにおけるポップアップウィンドウとフローティングレイヤーのデザイン

従来のソフトウェアから Web ウェアへの段階的な移行の傾向の中で、デザイン パターンとテクノロジは...

jQueryはテーブル行データのスクロール効果を実現します

この記事の例では、テーブル行データのスクロール効果を実現するためのjQueryの具体的なコードを参考...