1. 概要1.1 定義大規模なログの場合は集中管理が必要です。 ELK は完全なソリューション セットを提供しており、それらはすべてオープン ソース ソフトウェアです。それらは完璧に連携して、多くのアプリケーションのニーズを効率的に満たします。 ELK は、Elasticsearch、Logstash、Kibana を含む 3 つの技術製品の略称であり、プロジェクトでログ フレームワークとして使用できます。 1.2 機能説明Elasticsearch は、データの収集、分析、保存という 3 つの主要機能を提供するオープンソースの分散検索エンジンです。 Logstash は主にログの収集、分析、フィルタリングを行うツールであり、多数のデータ取得方法をサポートしています。 Kibana もオープンソースの無料ツールです。Kibana は、Logstash および ElasticSearch 用のログ分析に適した Web インターフェイスを提供し、重要なデータ ログの集約、分析、検索に役立ちます。 それぞれの機能は以下の通りです。 簡単に言えば、アプリケーション サービスはログを生成し、Logger を通じて生成および出力します。Logstash は、http 経由でアプリケーション サービスによって生成されたログを受信します。Elasticsearch は、ログの全文検索機能を提供します。kibana は、Elasticsearch のグラフィカル インターフェイスを提供します。 2. ELKを展開するこの記事は Linux 上に展開されており、ルート ディレクトリとして /opt を使用しています。 2.1 ディレクトリとファイルを作成する1) docker-elkディレクトリを作成し、このディレクトリ内にファイルやその他のディレクトリを作成します。 /opt/docker_elk ディレクトリに移動します。 2) logstash設定ファイルを作成する /opt/docker_elk/logstashディレクトリに移動します /opt/docker_elk/logstash/logstash.conf をタッチします。 3) logstash.confを設定します。内容は次の通りです。 入力{ TCP { モード => "サーバー" ホスト => "0.0.0.0" ポート => 4560 コーデック => json } } 出力{ エラスティックサーチ ホスト => "es:9200" インデックス => "logstash-%{+YYYY.MM.dd}" } } ここでは入力ログのポートを4560と指定しているので、外部に公開するポートも4560にする必要があります。 4) docker-compose.ymlファイルを作成する /opt/docker_elk/docker-compose.yml をディレクトリに追加します。 2.2 docker-composeを設定して起動するdocker-compose.ymlを開き、 cd /opt/docker_elk docker_compose.yml を vi する 設定内容は以下のとおりです。 バージョン: '3.7' サービス: エラスティックサーチ: 画像: elasticsearch:7.6.2 コンテナ名: elasticsearch 特権: true ユーザー: ルート 環境: #クラスター名をelasticsearchに設定する - クラスター名=elasticsearch #シングルノードモードで開始 - discovery.type=single-node #JVM メモリ サイズを設定します - ES_JAVA_OPTS=-Xms512m -Xmx512m ボリューム: - /opt/docker_elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins - /opt/docker_elk/elasticsearch/data:/usr/share/elasticsearch/data ポート: - 9200:9200 - 9300:9300 ログスタッシュ: イメージ: logstash:7.6.2 コンテナ名: logstash ポート: -4560:4560 特権: true 環境: - TZ=アジア/上海 ボリューム: #logstash 設定ファイルをマウントします - /opt/docker_elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf 依存: - エラスティックサーチ リンク: # es ドメイン名を使用して elasticsearch サービスにアクセスできます - elasticsearch:es キバナ: イメージ: kibana:7.6.2 コンテナ名: kibana ポート: -5601:5601 特権: true リンク: # es ドメイン名を使用して elasticsearch サービスにアクセスできます - elasticsearch:es 依存: - エラスティックサーチ 環境: # elasticsearch にアクセスするためのアドレスを設定します - elasticsearch.hosts=http://es:9200 ここで privileged を true に設定すると、このコンテナーにルート権限が付与されます。それでは始めましょう docker-compose を起動 -d 起動時に、Elasticsearch が /usr/share/elasticsearch/data の下のファイルに権限がないというエラーを報告した場合は、ホスト マシンに読み取りおよび書き込み権限を付与する必要があります。 chmod 777 /opt/docker_elk/elasticsearch/data 起動中にエラーが発生した場合は、コンテナをシャットダウンして削除してから再起動する必要があります。削除コマンドをオフにします。 docker-compose ダウン 2.3 キバナを開く1) http://192.168.0.150:5601 で Kibana Web インターフェースにアクセスします。左側の[設定]をクリックして管理インターフェースに入ります 2) インデックスパターンをクリックした後、インデックスの作成をクリックします。 3) 「インデックスの作成」をクリックします。 4) logstash-* という名前のインデックスを作成します。 5) 次に、次のステップで@timestampフィルターを選択します。 6) 作成が完了したら、「検出」をクリックし、作成したインデックスを選択します。 3. ログを収集するこの記事では、SpringBoot アーキテクチャを使用して、ログ情報を logstash に記録します。 3.1 環境整備新しいSpringbootプロジェクトを作成し、Web依存関係をインポートする <依存関係> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </依存関係> さらに、logstash の依存関係をインポートする必要があります。 <!--logstash を統合する--> <依存関係> <グループ ID>net.logstash.logback</グループ ID> <artifactId>logstash-logback-encoder</artifactId> <バージョン>6.6</バージョン> </依存関係> 3.2 logbackによるログ記録Logback は SpringBoot の組み込みログであり、Web 依存関係がインポートされている限り使用できます。 1) テストパッケージの下に新しいテストクラスとテストメソッドを作成します。 org.apache.logging.log4j.LogManager をインポートします。 org.apache.logging.log4j.Logger をインポートします。 org.junit.jupiter.api.Test をインポートします。 org.springframework.boot.test.context.SpringBootTest をインポートします。 @SpringBootテスト パブリッククラスAppTest { //ログオブジェクトを作成する Logger logger = LogManager.getLogger(this.getClass()); @テスト パブリックボイドtest1() { logger.info("logback のログ情報が来ています"); logger.error("logback からのエラーメッセージが来ています"); } } 2) 必要なディレクトリに新しいlogback-spring.xmlを作成します。 <?xml バージョン="1.0" エンコーディング="UTF-8"?> <!DOCTYPE 構成> <構成> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <include resource="org/springframework/boot/logging/logback/console-appender.xml"/> <!--アプリケーション名--> <プロパティ名="APP_NAME" 値="springboot-logback-elk-demo"/> <!--ログファイルの保存パス--> <プロパティ名="LOG_FILE_PATH" 値="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/> <コンテキスト名>${APP_NAME}</コンテキスト名> <!-- 毎日ファイル アペンダーにログを記録します --> <アペンダー名="FILE" クラス="ch.qos.logback.core.rolling.RollingFileAppender"> <ローリングポリシークラス="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <ファイル名パターン>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</ファイル名パターン> <maxHistory>30</maxHistory> </ローリングポリシー> <エンコーダ> <パターン>${FILE_LOG_PATTERN}</パターン> </エンコーダ> </アペンダー> <!--logstash アペンダーへの出力--> <アペンダー名="LOGSTASH" クラス="net.logstash.logback.appender.LogstashTcpSocketAppender"> <!--アクセス可能な logstash ログ収集ポート--> <宛先>192.168.86.128:4560</宛先> <エンコーダの文字セット="UTF-8" クラス="net.logstash.logback.encoder.LogstashEncoder"/> </アペンダー> <ルートレベル="INFO"> <appender-ref ref="コンソール"/> <appender-ref ref="ファイル"/> <アペンダー参照ref="LOGSTASH"/> </ルート> </構成> 3) テストメソッドを起動し、kibanaのログ情報を表示します。 情報を表示するときは、左側の使用可能なフィールドで「メッセージ」情報を除外することをお勧めします。「thread_name」フィールドはオプションです。フィルタリングされたフィールドも左側に表示され、右側の情報がより明確になります。 これらのログでは、時間は元のログの記録時間ではなく、logstash がログを収集した作成時間であることに注意してください。 3.3 log4j2 によるログ記録log4j2 を使用するには、SpringBoot に付属するログを除外する必要があります。 1) logbackとimportの依存関係を除外する <依存関係> <groupId>org.springframework.boot</groupId> <artifactId>スプリングブートスターター</artifactId> <除外事項> <!-- log4j ログを導入する場合は、デフォルトの logback を削除する必要があります --> <除外> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </除外> </除外> </依存関係> <!-- ログ管理 log4j2 --> <依存関係> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <バージョン>2.1.0.RELEASE</バージョン> </依存関係> 2) リソースディレクトリに新しいlog4j2.xmlを作成します。 <?xml バージョン="1.0" エンコーディング="UTF-8"?> <構成ステータス="情報"> <プロパティ> <!-- ログファイルが保存されるディレクトリを宣言します --> <プロパティ名="LOG_HOME">E:\logs</プロパティ> <プロパティ名="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread][%class{36}:%line] - %msg%n"></プロパティ> </プロパティ> <アペンダー> <!--コンソール設定を出力--> <コンソール名="コンソール" ターゲット="SYSTEM_OUT"> <!-- コンソールはレベル以上の情報のみを出力し (onMatch)、その他の情報は直接拒否します (onMismatch) --> <ThresholdFilter レベル="情報" onMatch="承認" onMismatch="拒否"/> <!-- 出力ログ形式 --> <パターンレイアウト パターン="${LOG_PATTERN}"/> </コンソール> <!--ログをファイルに出力するための設定です。サイズがsizeを超えるたびに、このサイズのログは自動的にyear-monthで作成されたフォルダに保存され、アーカイブとして圧縮されます。 --> <RollingFile name="RollingFile" ファイル名="${LOG_HOME}\app_${date:yyyy-MM-dd}.log" ファイルパターン="${LOG_HOME}\${date:yyyy-MM}\app_%d{yyyy-MM-dd}_%i.log"> <ThresholdFilter レベル="情報" onMatch="承認" onMismatch="拒否"/> <!-- 出力ログ形式 --> <パターンレイアウト パターン="${LOG_PATTERN}"/> <!-- ログ ファイル サイズ --> <サイズベースのトリガーポリシー サイズ="20MB"/> <!-- 保持するファイルの最大数 --> <デフォルトのロールオーバー戦略最大="30"/> </ローリングファイル> <!--logstash アペンダーへの出力--> <ソケット名="ソケット" ホスト="192.168.86.128" ポート="4560" プロトコル="TCP"> <!--logstash へのログ形式の出力--> <パターンレイアウト パターン="${LOG_PATTERN}"/> </ソケット> </アペンダー> <!-- 次に Logger を定義します。Appender は Logger が定義され導入されている場合にのみ有効になります。ルートのレベルはログレベルを構成し、他のレベルも構成できます --> <ロガー> <ルートレベル="情報"> <AppenderRef ref="コンソール"/> <AppenderRef ref="ローリングファイル"/> <AppenderRef ref="ソケット"/> </ルート> </ロガー> </構成> 上記のメインの赤い部分では、logstash サービスの IP アドレスとログを記録するためのポートを指定する必要があります。 3) テストクラスに新しいテストメソッドを作成する org.apache.logging.log4j.LogManager をインポートします。 org.apache.logging.log4j.Logger をインポートします。 org.junit.jupiter.api.Test をインポートします。 org.springframework.boot.test.context.SpringBootTest をインポートします。 @SpringBootテスト パブリッククラスAppTest { //ログオブジェクトを作成する Logger logger = LogManager.getLogger(this.getClass()); ... @テスト パブリックボイドtest2() { logger.info("log4j2のログ情報です"); logger.error("log4j2のエラーメッセージです"); } } 4) テストメソッドを起動し、kibanaのログ情報を表示します。 情報を表示するときは、左側の使用可能なフィールドで「メッセージ」情報を除外することをお勧めします。「thread_name」フィールドはオプションです。左側にはフィルタリングされたフィールドも表示され、右側にはログ自体の時間など、より明確な情報が表示されます。これがログ構成の設定です。 これで、Docker Compose を使用して ELK を迅速にデプロイする (テスト済みで効果的) 方法に関するこの記事は終了です。Docker Compose を使用した ELK のデプロイの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: ティックアニメーション効果を作成するための svg+css または js
>>: MySQL 最適化 query_cache_limit パラメータの説明
背景数日前、MySql でページングを行っていたときに、ページングに制限 0,10 を使用するとデー...
目次説明する成し遂げるプロジェクトのディレクトリ構造は次のとおりです。効果図は以下のとおりです要約す...
目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...
序文:プロジェクト開発では、一部のビジネス テーブル フィールドで日付と時刻の型が使用されることが多...
HTML にはデータ属性が含まれていることがよくあります。これらは HTML5 のカスタム属性です。...
さまざまなソースからデータを集約することで、中央倉庫を作成できます。データ ウェアハウスは、ビジネス...
最近の Web サイトでは Https をサポートすることがほぼ標準機能となっており、Nginx は...
この記事では、MySQL 8.0.11 MSIバージョンのインストールと設定のチュートリアルを参考ま...
1. エフェクトHTMLを送信する <div id="送信ボタン">...
絶対、相対、固定位置の位置決めabsolue: 絶対配置。上、下、左、右を使用して、配置先の親要素に...
インライン形式<colgroup>...</colgroup>属性名 属性値...
div がネストされているときに margin が機能しない問題の解決策を次に示します。さて、マージ...
以前、モバイル適応に関する記事を書きました。非常に長く、内容が多すぎて読みづらいものでした。そこで、...
Oracle と MySQL の高可用性ソリューションについては、以前からまとめたいと思っていたので...
序文:ストレージ エンジンはデータベースの中核です。MySQL の場合、ストレージ エンジンはプラグ...