采集 EMQX 的日志
任务目标
如何通过 Telegraf 收集 EMQX 集群日志,并且输出到容器的标准输出
部署 telegraf-operator
Telegraf 是 InfluxData 开发的一个开源数据采集代理,可以收集、处理、聚合和写入指标。 它支持四类插件,包括输入,输出,聚合器,处理器。 更多关于 Telegraf 的文章可以参考:telegraf (opens new window) ,telegraf-operator 的文档可以参考: telegraf-operator (opens new window)
执行如下命令部署 telegraf-operator
helm repo add influxdata https://helm.influxdata.com/
helm upgrade --install telegraf-operator influxdata/telegraf-operator
1
2
全局配置 - classes
全局配置通过 secret 挂载,指定 class 名称为 logs
agent
用来配置 telegraf agent,详细定义参考:telegraf agent (opens new window)
inputs.tail
用来配置输入的 tail 插件,详细定义参考:tail (opens new window)
outputs.file
用来配置输出的 file 插件,详细定义参考:file (opens new window)
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"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
将上述内容保存为 classes.yaml
kubectl apply -f classes.yaml
1
kubectl get secret telegraf-operator-classes
1
输出类似于:
NAME TYPE DATA AGE
telegraf-operator-classes Opaque 1 11h
1
2
部署 EMQX 集群
Telegraf 使用 annotations 的方式为 Pod 注入日志采集的 sidecar ,详细的 annotations 定义参考文档:telegraf annotations (opens new window)
telegraf.influxdata.com/internal
设置为 false, 表示不收集 telegraf agent 自己的指标
telegraf.influxdata.com/volume-mounts
设置日志的挂载路径
telegraf.influxdata.com/class
logs 引用上面指定的 class 的名称
spec.bootstrapConfig
配置输出日志到文件,并且日志级别为 debug
spec.coreTemplate.spec.extraVolumes
和 spec.coreTemplate.spec.extraVolumeMounts
配置日志挂载
apiVersion: apps.emqx.io/v2alpha1
kind: EMQX
metadata:
name: emqx
annotations:
telegraf.influxdata.com/class: "logs"
telegraf.influxdata.com/internal: "false"
telegraf.influxdata.com/volume-mounts: "{\"log-volume\":\"/opt/emqx/log\"}"
spec:
image: "emqx/emqx-enterprise:5.0.0"
bootstrapConfig: |
log {
file_handlers {
my_debug_log {
enable = true
level = debug
file = "log/emqx.log"
rotation {
enable = true
count = 10
}
}
}
}
coreTemplate:
spec:
extraVolumes:
- name: log-volume
emptyDir: {}
extraVolumeMounts:
- name: log-volume
mountPath: /opt/emqx/log
replicantTemplate:
spec:
extraVolumes:
- name: log-volume
emptyDir: {}
extraVolumeMounts:
- name: log-volume
mountPath: /opt/emqx/log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
将上述内容保存为:emqx.yaml
,并执行如下命令部署 EMQX 集群:
$ kubectl apply -f emqx.yaml
emqx.apps.emqx.io/emqx created
1
2
3
检查 EMQX 集群状态,请确保 STATUS
为 Running
,这可能需要一些时间等待 EMQX 集群准备就绪。
$ kubectl get emqx emqx
NAME IMAGE STATUS AGE
emqx emqx:5.0 Running 10m
1
2
3
4
telegraf.influxdata.com/internal
设置为 false, 表示不收集 telegraf agent 自己的指标
telegraf.influxdata.com/volume-mounts
设置日志的挂载路径
telegraf.influxdata.com/class
logs 引用上面指定的 class 的名称
spec.template.spec.emqxContainer.emqxConfig
配置输出日志到文件,并且日志级别为 debug
spec.template.spec.volumes
和 spec.template.spec.emqxContainer.volumeMounts
配置日志挂载
apiVersion: apps.emqx.io/v1beta4
kind: EmqxEnterprise
metadata:
name: emqx-ee
annotations:
telegraf.influxdata.com/internal: "false"
telegraf.influxdata.com/volume-mounts: "{\"log-volume\":\"/opt/emqx/log\"}"
telegraf.influxdata.com/class: "logs"
spec:
template:
spec:
emqxContainer:
image:
repository: emqx/emqx-ee
version: 4.4.14
emqxConfig:
log.level: debug
log.to: file
volumeMounts:
- name: log-volume
mountPath: /opt/emqx/log
volumes:
- name: log-volume
emptyDir: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
将上述内容保存为:emqx.yaml,执行如下命令部署 EMQX 集群:
$ kubectl apply -f emqx.yaml
emqxenterprise.apps.emqx.io/emqx-ee created
1
2
3
检查 EMQX 集群状态,请确保 STATUS
为 Running
,这可能需要一些时间等待 EMQX 集群准备就绪。
$ kubectl get emqxenterprises
NAME STATUS AGE
emqx-ee Running 8m33s
1
2
3
4
检查 Telegraf 收集的日志
kubectl logs -f $pod_name -c telegraf
1