ELKシリーズ-水路ログコレクションを使用
ログ収集の一部は、flumeを使用してさまざまなアプリケーションサーバー上のログを収集し、次にTencent Cloudのメッセージキューckafkaに移動し、logstashを使用してckafkaのログメッセージを消費してelasticserchに入力することです。
水路ツールの紹介
- Flumeは、分散型で信頼性が高く、可用性の高い大量のログ収集、集約、および送信システムです。ログシステム内のさまざまなデータ送信者をカスタマイズしてデータを収集することをサポートします。同時に、Flumeは、データを簡単に処理し、さまざまなデータ受信者(テキスト、HDFS、Hbase、kafkaなど)に書き込む機能を提供します。
- 水路のデータフローは、イベントによって実行されます。イベントはFlumeの基本的なデータユニットであり、ログデータ(バイト配列の形式)を伝送し、ヘッダー情報を伝送します。これらのイベントは、エージェントの外部のソースによって生成されます。ソースがイベントをキャプチャすると、特定のフォーマットが実行されます。次に、ソースがイベントを記録します。(単一または複数の)チャネルにプッシュします。Channelは、シンクがイベントを処理するまでイベントを保持するバッファと考えることができます。Sinkは、ログを永続化するか、イベントを別のソースにプッシュする役割を果たします。
- 水路の信頼性、ノードに障害が発生した場合、ログを失うことなく他のノードに送信できます。Flumeは、それぞれ強いものから弱いものまで、3つのレベルの信頼性保証を提供します。エンドツーエンド(エージェントはデータを受信し、最初にイベントをディスクに書き込み、データ送信が成功した後にデータを削除します。データ送信の場合失敗、再送信できます。)、失敗時に保存(これは、データレシーバーがクラッシュしたときにスクライブが採用した戦略でもあり、データをローカルに書き込み、リカバリ後も送信を継続します)、Besteffort(データが受信者に送信された場合、検証は行われません)。
水路の設置と使用
- サーバーアップロード水路ソフトウェア
apache-flume-1.9.0-bin.tar.gz - 解圧flumetar
-zxvf apache-flume-1.9.0-bin.tar.gz -C / usr / local / - ユーザー権限の変更
chown-R yunwei:yunwei ./apache-flume-1.9.0-bin - メタデータディレクトリファイルを作成する
touch / home / yunweizhrt / 3wcm_fmm_visit.json - メモリ構成を変更します。flumevibin / flume -ng JAVA_OPTS = "-Xmx120m"
のbinディレクトリに移動します。 - 構成ファイルを変更します。
ディレクトリ/ home / yunweizhrt / tomcat-logs / 3w-cn / dwz-web-jump / fmm_visitからTencentCloudckafkaにログを収集する必要があります。
構成スクリプトは次のとおりです。
[yunweizhrt@VM_40_2_centos conf]$ vim 3wcm_fmm_visit
agent.sources = s1
agent.channels = c1
agent.sinks = r1
agent.sources.s1.channels = c1
agent.sinks.r1.channel = c1
agent.sources.s1.type = TAILDIR
agent.sources.s1.positionFile = /home/yunweizhrt/3wcm_fmm_visit.json
agent.sources.s1.filegroups = f1
agent.sources.s1.filegroups.f1=/home/yunweizhrt/tomcat-logs/3w-cn/dwz-web-jump/.*log
agent.sources.s1.fileHeader = true
agent.channels.c1.type = memory
agent.channels.c1.capacity = 1000
agent.channels.c1.transactionCapacity = 100
agent.sinks.r1.type = org.apache.flume.sink.kafka.KafkaSink
agent.sinks.r1.brokerList = 10.38.40.7:9092
agent.sinks.r1.topic = flume_fmm_visit_3wcn
clog.sinks.sink_log1.flumeBatchSize = 2000
clog.sinks.sink_log1.kafka.producer.acks = 1
#下面是自己开发的插件可以去掉
agent.sources.s1.interceptors = i1
agent.sources.s1.interceptors.i1.type = com.zhrt.flume.interceptor.IpExtractInterceptor$CounterInterceptorBuilder
agent.sources.s1.interceptors.i1.regex = stat_.+
agent.sources.s1.interceptors.i1.value = hourly
agent.sources.s1.interceptors.i1.default = dail
[yunweizhrt@VM_40_2_centos conf]$
-
水路プロセスを開始します
nohup./bin/flume-ng agent -n agent -c conf -f conf / 3wcm_fmm_visit& -
起動が成功したかどうかを確認します
このプロセスが存在するかどうかを照会します
-
データが収集されていることを確認します
logstashを使用してTencentCloudckafkaを消費します
-
構成情報は次のとおりです。
コードは、タイプフィールドに従って区別されるフィールドタイプの追加を実装します
[root@VM_40_24_centos conf.d]# pwd
/usr/local/logstash-7.0.1/config/conf.d
[root@VM_40_24_centos conf.d]# more logstash-jump-3wcn-fmm.conf
input{
kafka{
bootstrap_servers => "10.18.40.7:9092"
group_id => "flume_fmm_visit_3wcn"
topics => "flume_fmm_visit_3wcn"
consumer_threads => 1
decorate_events => true
auto_offset_reset => "latest"
type => "java_3wcn_fmm_visit"
}
}
filter {
if [type] == "java_3wcn_fmm_visit" {
mutate {
add_field => { "types" => "%{type}"}
}
json {
source => "message"
}
date {
match => ["visittime", "yyyy-MM-dd HH:mm:ss"]
}
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
}
ruby {
code => "event.set('@timestamp',event.get('timestamp'))"
}
mutate {
remove_field => "message"
remove_field => "content"
remove_field => "kafka"
remove_field => "tags"
remove_field => ["timestamp"]
}
}
}
output {
if [types] == "java_3wcn_fmm_visit" {
elasticsearch {
hosts => ["10.10.10.16:9200"]
index => "logstash_jump_3wcn_fmm_%{+YYYY_MM_dd}"
}
}
}
[root@VM_40_24_centos conf.d]#
-
logstash
nohup ./bin/logstash -f ./config/conf.d/&を開始します -
コレクションを確認する