采集 EMQX 的日志
任务目标
如何通过 Telegraf 收集 EMQX 集群日志,并且输出到容器的标准输出
部署 telegraf-operator
Telegraf 是 InfluxData 开发的一个开源数据采集代理,可以收集、处理、聚合和写入指标。 它支持四类插件,包括输入,输出,聚合器,处理器。 更多关于 Telegraf 的文章可以参考:telegraf ,telegraf-operator 的文档可以参考: telegraf-operator
执行如下命令部署 telegraf-operator
bash
helm repo add influxdata https://helm.influxdata.com/
helm upgrade --install telegraf-operator influxdata/telegraf-operator
全局配置 - classes
全局配置通过 secret 挂载,指定 class 名称为 logs
agent
用来配置 telegraf agent,详细定义参考:telegraf agent
inputs.tail
用来配置输入的 tail 插件,详细定义参考:tail
outputs.file
用来配置输出的 file 插件,详细定义参考:file
yaml
apiVersion: v1
kind: Secret
metadata:
name: telegraf-operator-classes
namespace: default
stringData:
logs: |+
[agent]
interval = "60s"
flush_jitter = "5s"
flush_interval = "15s"
debug = true
quiet = false
metric_batch_size = 128
metric_buffer_limit = 256
[[inputs.tail]]
files = ["/opt/emqx/log/emqx.log.[1-9]"]
from_beginning = false
max_undelivered_lines = 64
character_encoding = "utf-8"
data_format = "grok"
grok_patterns = ['^%{TIMESTAMP_ISO8601:timestamp:ts-"2006-01-02T15:04:05.999999999-07:00"} \[%{LOGLEVEL:level}\] (?m)%{GREEDYDATA:messages}$']
[inputs.tail.tags]
collection = "log"
[[outputs.file]]
files = ["stdout"]
将上述内容保存为 classes.yaml
- 创建 secret
shell
kubectl apply -f classes.yaml
- 检查创建的 secret
shell
kubectl get secret telegraf-operator-classes
输出类似于:
shell
NAME TYPE DATA AGE
telegraf-operator-classes Opaque 1 11h
部署 EMQX 集群
Telegraf 使用 annotations 的方式为 Pod 注入日志采集的 sidecar ,详细的 annotations 定义参考文档:telegraf annotations
检查 Telegraf 收集的日志
kubectl logs -f $pod_name -c telegraf