この記事の元のリンク:https://blog.csdn.net/xzk9381/article/details/114324351
通常、物理マシンでFilebeatを使用してログを収集し、Kafkaに出力する場合、複数のfilebeat構成ファイルが書き込まれ、複数のfilebeatプロセスが開始されて、さまざまなパスでログが収集され、さまざまなトピックにプッシュされます。次に、すべてのログパスがfilebeat構成ファイルに書き込まれる場合は、さまざまなログに従ってトピックを設定する必要があります。
実際、logstashもこの機能を実現できます。ただし、ここではFilebeatでの実装のみを示しています。手順と説明は次のとおりです。
さまざまなログをさまざまなインデックスに収集する場合は、私の別の記事を参照できます:https://blog.csdn.net/xzk9381/article/details/109535450
- たとえば、次の3つのログファイルがあり、さまざまなトピックに出力する必要があります。
access.log ----> Topic:topic-for-access-log
error.log ----> Topic:topic-for-error-log
info.log ----> Topic:topic-for-info-log
- Kafkaで3つのトピックを作成します。
[@localhost ~]# for type in access error info; do /opt/kafka_cluster/kafka/bin/kafka-topics.sh --create --topic topic-for-${type}-log --zookeeper 10.16.12.204:2181 --partitions 1 --replication-factor 1; done
Created topic topic-for-access-log.
Created topic topic-for-error-log.
Created topic topic-for-info-log.
- 対応するトピックがすでにzookeeperに存在するかどうかを確認します。
[@localhost ~]# /opt/kafka_cluster/zookeeper/bin/zkCli.sh
Connecting to localhost:2181
[zk: localhost:2181(CONNECTED) 0] ls /brokers/topics
[__consumer_offsets, topic-for-access-log, topic-for-error-log, topic-for-info-log]
- 次のFilebeat構成ファイルを記述します。
filebeat.idle_timeout: 2s
filebeat.name: filebeat-shiper
filebeat.spool_zie: 50000
filebeat.inputs: # 从这里开始定义每个日志的路径、类型、收集方式等信息
- type: log # 指定收集的类型为 log
paths:
- /opt/log_test/access.log # 设置 access.log 的路径
fields: # 设置一个 fields,用于标记这个日志
topic: topic-for-access-log # 为 fields 设置一个关键字 topic,值为 kafka 中已经设置好的 topic 名称
enabled: true
backoff: 1s
backoff_factor: 2
close_inactive: 1h
encoding: plain
harvester_buffer_size: 262144
max_backoff: 10s
max_bytes: 10485760
scan_frequency: 10s
tail_lines: true
- type: log
paths:
- /opt/log_test/error.log # 设置 error.log 的路径
fields: # 设置一个 fields,用于标记这个日志
topic: topic-for-error-log # 为 fields 设置一个关键字 topic,值为 kafka 中已经设置好的 topic 名称
enabled: true
backoff: 1s
backoff_factor: 2
close_inactive: 1h
encoding: plain
harvester_buffer_size: 262144
max_backoff: 10s
max_bytes: 10485760
scan_frequency: 10s
tail_lines: true
- type: log
paths:
- /opt/log_test/info.log # 设置 info.log 的路径
fields: # 设置一个 fields,用于标记这个日志
topic: topic-for-info-log # 为 fields 设置一个关键字 topic,值为 kafka 中已经设置好的 topic 名称
enabled: true
backoff: 1s
backoff_factor: 2
close_inactive: 1h
encoding: plain
harvester_buffer_size: 262144
max_backoff: 10s
max_bytes: 10485760
scan_frequency: 10s
tail_lines: true
output.kafka: # 指定输出到 Kafka
bulk_flush_frequency: 0
bulk_max_size: 2048
codec.format:
string: '%{[message]}'
compression: gzip
compression_level: 4
hosts:
- 10.16.12.204:9092 # 指定 Kafka 的地址,如果是集群则写集群的地址
max_message_bytes: 10485760
partition.round_robin:
reachable_only: true
required_acks: 1
topic: '%{
[fields.topic]}' # 根据每个日志设置的 fields.topic 来输出到不同的 topic
workers: 4
setup.ilm.enabled: false
- アクセス、エラー、および情報のログファイルに次のように書き込みます。
echo "this is access log" > /opt/log_test/access.log
echo "this is error log" > /opt/log_test/error.log
echo "this is info log" > /opt/log_test/info.log
- Filebeatを開始します。
/opt/filebeat-7.3.0/filebeat run -c /opt/filebeat-7.3.0/conf/test.yaml -httpprof 0.0.0.0:15502 -path.logs /opt/filebeat-7.3.0/logs/filebeat_15502 -e
- Kafkaクラスター消費ログに接続します。
[@k8s-master1 ~]# /opt/kafka_cluster/kafka/bin/kafka-console-consumer.sh --topic topic-for-access-log --bootstrap-server 10.16.12.204:9092 --from-beginning
this is access log
[@k8s-master1 ~]# /opt/kafka_cluster/kafka/bin/kafka-console-consumer.sh --topic topic-for-error-log --bootstrap-server 10.16.12.204:9092 --from-beginning
this is error log
[@k8s-master1 ~]# /opt/kafka_cluster/kafka/bin/kafka-console-consumer.sh --topic topic-for-info-log --bootstrap-server 10.16.12.204:9092 --from-beginning
this is info log
Kafkaのさまざまなトピックでさまざまなパスのログが収集されていることがわかります。
この記事の元のリンク:https://blog.csdn.net/xzk9381/article/details/114324351