Spring BootとFlumeをベースにしたログ収集・分析システムを構築する
企業システムの規模が拡大するにつれ、システムログはますます大規模になり、信頼性の高いログ収集および分析システムがなければ、システムを効果的に監視および保守することが困難になります。この記事では、Spring Boot と Flume をベースにした効率的なログ収集・分析システムの構築方法を紹介します。
- 前提条件
開始する前に、次のソフトウェアをインストールして設定する必要があります:
- JDK 8 以降
- Maven 3.3 以降
- Apache Flume 1.9.0 以降
- Elasticsearch 7.6.2 以降
- Kibana 7.6.2 以降
- Spring Boot アプリケーションの構成
まず、Spring Boot アプリケーションを作成し、必要な依存関係を追加する必要があります。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
application.properties ファイルに、次の設定:
# 应用端口号 server.port=8080 # log4j2配置 logging.config=classpath:log4j2.xml # flume配置 flume.agentName=myflume flume.sourceType=avro flume.clientType=load-balancing flume.hosts=localhost:41414 # elasticsearch配置 spring.elasticsearch.rest.uris=http://localhost:9200
上記の設定では、アプリケーションのポート番号、log4j2 設定ファイル、Flume 関連の設定、および Elasticsearch のアクセス URI を指定しました。
- ログ コレクター
アプリケーション ログを Flume に送信するには、カスタム log4j2 アペンダーを作成する必要があります。
@Plugin(name = "Flume", category = "Core", elementType = "appender", printObject = true) public class FlumeAppender extends AbstractAppender { private static final ObjectMapper MAPPER = new ObjectMapper(); private final FlumeClient client; private final String sourceType; protected FlumeAppender(String name, Filter filter, Layout<? extends Serializable> layout, FlumeClient client, String sourceType) { super(name, filter, layout, true); this.client = client; this.sourceType = sourceType; } @PluginFactory public static FlumeAppender createAppender(@PluginAttr("name") String name, @PluginElement("Filters") Filter filter, @PluginElement("Layout") Layout<? extends Serializable> layout, @PluginAttr("sourceType") String sourceType, @PluginAttr("hosts") String hosts) { if (name == null) { LOGGER.error("FlumeAppender missing name"); return null; } if (client == null) { LOGGER.error("FlumeAppender missing client"); return null; } return new FlumeAppender(name, filter, layout, createClient(hosts), sourceType); } private static FlumeClient createClient(String hosts) { LoadBalancingRpcClient rpcClient = new LoadBalancingRpcClient(); String[] hostArray = hosts.split(","); for (String host : hostArray) { String[] hostParts = host.split(":"); rpcClient.addHost(new InetSocketAddress(hostParts[0], Integer.parseInt(hostParts[1]))); } Properties props = new Properties(); props.setProperty(RpcClientConfigurationConstants.CONFIG_CLIENT_TYPE, "default_loadbalance"); props.setProperty(RpcClientConfigurationConstants.CONFIG_HOSTS, hosts); props.setProperty(RpcClientConfigurationConstants.CONFIG_MAX_BACKOFF, "10000"); AvroEventSerializer serializer = new AvroEventSerializer(); serializer.configure(props, false); return new FlumeClient(rpcClient, serializer); } @Override public void append(LogEvent event) { try { byte[] body = ((StringLayout) this.getLayout()).toByteArray(event); Map<String, String> headers = new HashMap<>(); headers.put("timestamp", Long.toString(event.getTimeMillis())); headers.put("source", "log4j"); headers.put("sourceType", sourceType); Event flumeEvent = EventBuilder.withBody(body, headers); client.sendEvent(flumeEvent); } catch (Exception e) { LOGGER.error("Failed to send event to Flume", e); } } }
上記のコードでは、ログ イベントを Flume イベントにパッケージ化して Flume サーバーに送信する log4j2 アペンダーを実装しました。
log4j2 設定ファイルを作成し、FlumeAppender を設定します。
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Flume name="flume" sourceType="spring-boot" hosts="${flume.hosts}"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Flume> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="flume"/> </Root> </Loggers> </Configuration>
この log4j2 構成ファイルでは、FlumeAppender を定義し、ルート ロガーでそれを参照します。
- Flume 構成
Flume エージェント内のアプリケーションから送信されたログ メッセージを受信し、Elasticsearch に送信するように Flume を構成する必要があります。
以下に示すように Flume 設定ファイルを作成します。
# Define the agent name and the agent sources and sinks myflume.sources = mysource myflume.sinks = mysink myflume.channels = channel1 # Define the source myflume.sources.mysource.type = avro myflume.sources.mysource.bind = 0.0.0.0 myflume.sources.mysource.port = 41414 # Define the channel myflume.channels.channel1.type = memory myflume.channels.channel1.capacity = 10000 myflume.channels.channel1.transactionCapacity = 1000 # Define the sink myflume.sinks.mysink.type = org.elasticsearch.hadoop.flume.ElasticsearchSink myflume.sinks.mysink.hostNames = localhost:9200 myflume.sinks.mysink.indexName = ${type}-%{+YYYY.MM.dd} myflume.sinks.mysink.batchSize = 1000 myflume.sinks.mysink.typeName = ${type} # Link the source and sink with the channel myflume.sources.mysource.channels = channel1 myflume.sinks.mysink.channel = channel1
Flume 構成ファイルでは、エージェント、ソース、シンクを定義します。ソースは avro タイプ、ポート 41414 にバインドされ、channel1 はメモリ タイプ、容量は 10000、transactionCapacity は 1000 です。シンクは ElasticsearchSink タイプで、ローカル ホストのポート 9200 に type という名前のインデックスを作成し、イベントが 1000 件に達するとバッチで Elasticsearch に送信します。
- Elasticsearch と Kibana の構成
最後に、Elasticsearch と Kibana を構成する必要があります。 Elasticsearch では、Flume 設定ファイルで定義されたインデックス名と一致するインデックスを作成する必要があります。
Kibana では、インデックス スキーマを作成する必要があります。 Kibana のメイン メニューで、[管理]、[Kibana] の順に選択します。 Kibanaのインデックスパターンで「インデックスパターンの作成」を選択します。 Flume 構成ファイルで定義されているインデックス名を入力し、プロンプトに従って構成します。
アプリケーションのログ メッセージを表示するには、Kibana のダッシュボードを作成する必要もあります。 Kibana のメイン メニューで、[ダッシュボード]、[ダッシュボードの作成] の順に選択します。 「ビジュアライゼーション」タブで、「ビジュアライゼーションの追加」を選択します。データ テーブルを選択し、必要なフィールドと視覚化オプションを設定します。
- 結論
この記事では、Spring Boot と Flume を使用して効率的なログ収集と分析システムを構築する方法を紹介しました。アプリケーションのログ イベントを Flume サーバーに送信するためにカスタム log4j2 Appender を実装し、ログ分析と視覚化に Elasticsearch と Kibana を使用しました。この記事が独自のログ収集および分析システムの構築に役立つことを願っています。
以上がSpring BootとFlumeをベースにしたログ収集・分析システムを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Linux 環境でログ分析に Splunk を使用するにはどうすればよいですか?概要: Splunk は、大量のログ データからリアルタイムで貴重な情報を検索、分析、抽出するのに役立つ強力なログ分析ツールです。この記事では、Linux 環境に Splunk をインストールして設定し、ログ分析に使用する方法を紹介します。 Splunk のインストール: まず、Linux システムに Splunk をダウンロードしてインストールする必要があります。具体的な操作は次のとおりです: Splunk 公式 Web サイト (www.

実際のプロジェクトでは、分散トランザクションを避けるように努めます。ただし、場合によってはサービスを分割する必要があり、分散トランザクションの問題が発生することがあります。同時に、分散取引についても面接で質問されるので、このケースで練習し、面接で 123 について話すことができます。

Linux システムのログ分析と障害診断を実行する方法については、具体的なコード例が必要です Linux システムでは、システムの実行状態やさまざまなイベントの発生を記録するログは非常に重要です。システム ログを分析および診断することで、システム障害の原因を特定し、問題を時間内に解決することができます。この記事では、一般的に使用される Linux ログ分析および障害診断方法をいくつか紹介し、対応するコード例を示します。ログ ファイルの場所と形式 Linux システムでは、通常、ログ ファイルは /var/lo に保存されます。

NginxProxyManager のログ分析と監視には、特定のコード サンプルが必要です。はじめに: NginxProxyManager は、Nginx に基づくプロキシ サーバー管理ツールです。プロキシ サーバーを管理および監視するためのシンプルかつ効果的な方法を提供します。実際の運用では、潜在的な問題を発見したり、時間内にパフォーマンスを最適化するために、NginxProxyManager のログを分析および監視する必要があることがよくあります。この記事では、よく使われるいくつかの使い方を紹介します。

読み取りと書き込みの分離を実現する方法、Spring Boot プロジェクト、データベースは MySQL、永続層は MyBatis を使用します。

Python と Redis を使用したログ分析システムの構築: システムの健全性をリアルタイムで監視する方法 はじめに: システムを開発および保守する場合、システムの健全性を監視することは非常に重要です。優れた監視システムにより、システムのステータスをリアルタイムで把握し、問題を時間内に発見して解決し、システムの安定性とパフォーマンスを向上させることができます。この記事では、Python と Redis を使用して、システムの稼働状況をリアルタイムに監視するシンプルかつ実用的なログ分析システムを構築する方法を紹介します。環境をセットアップする: まず、Python をセットアップする必要があります。

Linux で grep コマンドを使用してログ分析を行うにはどうすればよいですか?はじめに: ログはシステムの運用中に生成される重要な記録であり、システムの運用、保守、トラブルシューティングにおいて、ログの分析は重要な作業です。 Linux オペレーティング システムの grep コマンドは、ログ分析に非常に適した強力なテキスト検索ツールです。この記事では、ログ分析によく使われるgrepコマンドの使い方と具体的なコード例を紹介します。 1. grep コマンドの概要 grep は Linux システムのファイルです

NginxProxyManager を使用して Web サイトのアクセス ログを収集および分析する方法 はじめに: インターネットの急速な発展に伴い、Web サイトのログ分析は重要な部分になってきました。 Web サイトのアクセスログを収集して分析することで、ユーザーの行動習慣を理解し、Web サイトのパフォーマンスを最適化し、ユーザーエクスペリエンスを向上させることができます。この記事では、NginxProxyManager を使用して Web サイトのアクセス ログを収集および分析する方法 (NginxProxyManager の設定、収集など) を紹介します。
