Telegraf是InfluxData生态下的轻量级数据采集代理,支持通过各类插件采集不同来源的数据,其中内置的xml插件可以直接解析XML文件内容,提取指定节点数据后转换为时序指标写入InfluxDB。整个过程不需要额外开发代码,仅通过配置文件调整即可实现。
前置环境准备
首先需要确保已经安装好Telegraf和InfluxDB,并且InfluxDB处于运行状态,创建了用于存储指标的目标数据库。可以通过以下命令验证Telegraf是否支持xml插件:
telegraf --available-plugins | grep xml
如果输出包含xml说明插件已内置,无需额外安装。
XML示例文件准备
假设需要监控的XML文件路径为/data/app_config.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<app_config>
<service name="user_service">
<port>8080</port>
<max_conn>1000</max_conn>
<status>running</status>
</service>
<service name="order_service">
<port>8081</port>
<max_conn>2000</max_conn>
<status>stopped</status>
</service>
</app_config>
Telegraf配置编写
Telegraf的配置文件通常位于/etc/telegraf/telegraf.conf,我们需要添加inputs.xml和outputs.influxdb两个配置段。
XML输入插件配置
在配置文件中添加以下内容,指定XML文件路径和解析规则:
[[inputs.xml]]
## XML文件路径,支持通配符
files = ["/data/app_config.xml"]
## 解析间隔,默认10秒
interval = "10s"
## 指定要提取的XML节点路径,使用xpath语法
[[inputs.xml.xpath]]
## 对应指标的字段名
field_name = "port"
## xpath表达式,提取所有service下的port节点值
xpath = "/app_config/service/port"
## 值类型,支持string、int、float、bool
value_type = "int"
[[inputs.xml.xpath]]
field_name = "max_conn"
xpath = "/app_config/service/max_conn"
value_type = "int"
[[inputs.xml.xpath]]
field_name = "status"
xpath = "/app_config/service/status"
value_type = "string"
## 提取节点的属性作为标签,方便后续分组查询
[[inputs.xml.tags]]
tag_name = "service_name"
xpath = "/app_config/service/@name"
InfluxDB输出插件配置
继续添加输出配置,指定InfluxDB的连接信息和目标数据库:
[[outputs.influxdb]] ## InfluxDB地址,默认本地8086端口 urls = ["http://127.0.0.1:8086"] ## 目标数据库名称,需要提前创建 database = "telegraf_xml_metrics" ## 如果InfluxDB开启了认证,填写用户名和密码 # username = "admin" # password = "admin123" ## 保留策略,默认使用autogen retention_policy = "autogen"
启动与验证
保存配置后,重启Telegraf服务使配置生效:
# 系统使用systemd的情况 systemctl restart telegraf # 查看服务状态确认启动正常 systemctl status telegraf
如果启动失败,可以通过telegraf --config /etc/telegraf/telegraf.conf --test命令测试配置是否有语法错误。
之后进入InfluxDB命令行,查询是否成功写入指标:
# 进入InfluxDB交互终端 influx # 切换到目标数据库 USE telegraf_xml_metrics # 查询指标 SELECT * FROM xml LIMIT 10
如果返回结果中包含port、max_conn、status字段以及service_name标签,说明监控和上传已经成功。
常见问题排查
- 如果指标没有写入,首先检查XML文件路径是否正确,Telegraf进程是否有文件读取权限
- xpath表达式错误会导致无法提取到数据,可以使用在线xpath测试工具验证表达式是否能匹配到目标节点
- 确认InfluxDB的数据库是否存在,输出插件的地址和端口是否配置正确
- 如果提取的数值类型不匹配,会导致写入失败,需要确认
value_type和XML节点实际内容类型一致