Telegraf input.exec无法解析JSON:登录会话数据采集问题求助
解决Telegraf采集登录会话数据无输出的问题
1. 修复JSON输出格式问题
你的脚本当前每行输出一个独立的JSON对象,但Telegraf默认的json数据格式期望单个JSON对象或JSON数组,而非多行零散的JSON,这是最可能导致无数据的核心原因。修改脚本将所有输出合并为一个JSON数组:
方案一(用jq优雅处理数组)
#!/bin/bash last -F | grep logged | while read -r line; do username=$(echo "$line" | awk '{print $1}') login_time=$(echo "$line" | awk '{print $5, $6, $7, $8}') logout_time=$(echo "$line" | awk '{print $10, $11, $12, $13}') jq -n \ --arg user "$username" \ --arg login "$login_time" \ --arg logout "$logout_time" \ '{username: $user, login_time: $login, logout_time: $logout}' done | jq -s '.'
(jq -s '.'会把多行独立JSON合并为一个标准JSON数组)
方案二(用文本处理工具拼接数组)
#!/bin/bash last -F | grep logged | awk '{ username = $1; login_time = $5 " " $6 " " $7 " " $8; logout_time = $10 " " $11 " " $12 " " $13; printf "{\"username\":\"%s\",\"login_time\":\"%s\",\"logout_time\":\"%s\"},", username, login_time, logout_time }' | sed 's/,$//' | awk '{print "[" $0 "]"}'
2. 检查Telegraf运行权限
Telegraf默认以telegraf用户运行,需确保该用户具备以下权限:
- 脚本执行权限:执行
chmod +x /usr/local/bin/logonSessions.sh,并保证telegraf用户能访问脚本所在目录 - 登录日志读取权限:
last命令依赖/var/log/wtmp文件,执行sudo chgrp telegraf /var/log/wtmp && sudo chmod g+r /var/log/wtmp赋予读权限
3. 统一脚本中的命令绝对路径
避免Telegraf运行环境与用户手动执行环境的PATH差异导致命令找不到,在脚本中使用绝对路径调用工具:
- 查看
last绝对路径:which last,比如输出/usr/bin/last,脚本中替换为/usr/bin/last - 查看
jq绝对路径:which jq,比如输出/usr/bin/jq,脚本中替换为/usr/bin/jq
4. 排查Telegraf详细日志
执行调试命令查看隐藏错误:
telegraf --config /etc/telegraf/telegraf.conf --debug
(替换为你的实际配置文件路径),运行几分钟后查看日志中是否有脚本执行失败、JSON解析错误等信息。
5. 修正Telegraf测试命令
你之前的测试命令缺少配置文件路径,正确的测试命令应为:
telegraf --config /etc/telegraf/telegraf.conf --test
确保加载到你的exec采集配置后再测试。
内容的提问来源于stack exchange,提问作者giff1
相关产品推荐
相关产品推荐

