You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:51:28