下面是昨天晚上配置日志采集过程中遇到的问题以及通过“智能助手”解决问题的过程~~
1、客户端启动如下报错
我在使用splunk 客户端 splunkforwarder 上送 客户端日志到 splunk 的服务端, 客户端启动如下报错:
[root@PRO-2 bin]# ./splunk restart
Stopping splunkd...
Shutting down. Please wait, as this may take a few minutes.
. [ OK ]
Stopping splunk helpers...
[ OK ]
Done.
Splunk> Be an IT superhero. Go home early.
Checking prerequisites...
Checking mgmt port [8089]: open
Text decryption - error in finalizing: No errors in queue
AES-GCM Decryption failed!
Decryption operation failed: AES-GCM Decryption failed!
Checking conf files for problems...
Done
Checking default conf files for edits...
Validating installed files against hashes from '/data/app/app-run/prod/splunkforwarder/splunkforwarder-9.4.0-6b4ebe426ca6-linux-amd64-manifest'
All installed files intact.
Done
All preliminary checks passed.
Starting splunk server daemon (splunkd)...
PYTHONHTTPSVERIFY is set to 0 in splunk-launch.conf disabling certificate validation for the httplib and urllib libraries shipped with the embedded Python interpreter; must be set to "1" for increased security
Enter PEM pass phrase:
Done
[ OK ]
[root@PRO-2 bin]#
请提供思路和如何解决
你遇到的 Splunk Forwarder 启动报错为:
Text decryption - error in finalizing: No errors in queue
AES-GCM Decryption failed!
Decryption operation failed: AES-GCM Decryption failed!
这通常说明 Splunk Forwarder 尝试解密加密内容(如:证书、密钥、密文配置)失败。问题关键在于 需要解密的文件(如证书)提供了错误的 passphrase,或文件本身损坏/不匹配。
✅ 错误成因分析
Splunk 报错中:
Enter PEM pass phrase:
说明你使用了 受保护的 PEM 私钥文件(带有加密),而 Splunk 无法完成它的解密流程。
AES-GCM Decryption failed!
是加密模块尝试解密失败时的通用错误,通常出现于以下场景:
✅ 解决思路
✅ 方案 1:检查
server.pem
是否加密(推荐)
查看 server.pem 是否使用了 passphrase 加密:
cat $SPLUNK_HOME/etc/auth/server.pem | head -n 10
如果你看到:
-----BEGIN ENCRYPTED PRIVATE KEY-----
说明这个私钥是加密的,需要密码才能解锁。
🔧 解决办法:
尝试使用 OpenSSL 重新导出未加密私钥:
openssl rsa -in server.pem -out server_unencrypted.pem
输入正确 passphrase 后,生成了新的无加密私钥。
备份并替换旧私钥:
cp server.pem server.pem.bak
cp server_unencrypted.pem server.pem
重启 Splunk Forwarder:
./splunk restart
✅ 方案 2:不使用受密码保护的 key(更自动化)
如你在 inputs.conf 或 server.conf 中使用了受保护密钥(带 passphrase),建议换为非加密 key,否则每次启动都要求人工输入。
✅ 方案 3:确认证书路径配置是否正确
打开 $SPLUNK_HOME/etc/system/local/server.conf,确认 [sslConfig] 节下配置的 key 文件和证书路径是否指向有效文件。
例如:
[sslConfig]
serverCert = $SPLUNK_HOME/etc/auth/server.pem
sslPassword = changeme
若 serverCert 指向一个加密的 PEM 文件,而 sslPassword 未配置或错误,Splunk 启动时会解密失败。
✅ 方案 4:临时输入 passphrase(如果你知道密码)
当提示:
Enter PEM pass phrase:
时,尝试输入你用于生成该证书或密钥的 passphrase,看看能否继续启动。
🧪 额外建议
你当前使用的是 Splunk Forwarder 9.4.0,有严格的证书验证要求。
如为测试环境,可在 $SPLUNK_HOME/etc/splunk-launch.conf 中设置:
PYTHONHTTPSVERIFY=0
但这只是跳过证书验证,不解决 PEM 解密失败的问题。
✅ 总结处理流程:
确认 server.pem 是否加密(看是否含有 ENCRYPTED PRIVATE KEY)
若是加密的,用 openssl 解密导出非加密版本
替换 server.pem 并重启
如果配置引用了无效证书路径,修复 server.conf 中 [sslConfig] 的路径配置
如需要自动化部署,务必使用未加密 PEM 证书以避免每次输入密码
2、客户端配置
$SPLUNK_HOME/etc/auth/server.pem 的配置如下,我如何修改?
[sslConfig]
sslPassword = $7$MbkgV5dyi2dkjsp4RCyieQtTbNLQZH193u0SVLmrK4i6Fg05JTK8TQ==
[general]
pass4SymmKey = $7$VNPeon8qdc3u2mF3hKcBzdURnxL+CYMDbu185l8+krW+a6cMRyXUHg==
[lmpool:auto_generated_pool_forwarder]
description = auto_generated_pool_forwarder
peers = *
quota = MAX
stack_id = forwarder
[lmpool:auto_generated_pool_free]
description = auto_generated_pool_free
peers = *
quota = MAX
stack_id = free
你贴出的配置内容是 $SPLUNK_HOME/etc/system/local/server.conf 文件中的一部分,其中:
[sslConfig]
sslPassword = $7$MbkgV5dyi2dkjsp4RCyieQtTbNLQZH193u0SVLmrK4i6Fg05JTK8TQ==
这个加密的 sslPassword 表示你配置了一个 带密码保护的私钥(PEM)文件,而 Splunk 启动时无法自动解密该文件或解密失败。
✅ 如何修改以解决 “AES-GCM Decryption failed” 问题?
你有两个可选方案:
✅ 方案一:重新生成一个
不带密码的 PEM 文件
(推荐,自动部署友好)
步骤:
备份当前证书:
cp $SPLUNK_HOME/etc/auth/server.pem $SPLUNK_HOME/etc/auth/server.pem.bak
提取未加密的私钥 PEM(需知道原来的密码):
openssl rsa -in $SPLUNK_HOME/etc/auth/server.pem -out $SPLUNK_HOME/etc/auth/server_unencrypted.pem
系统会提示你输入原始 passphrase。如果你不知道这个密码,无法解密,只能重建。
替换 PEM 文件:
cp $SPLUNK_HOME/etc/auth/server_unencrypted.pem $SPLUNK_HOME/etc/auth/server.pem
清除 sslPassword 字段(重点):
编辑:
vi $SPLUNK_HOME/etc/system/local/server.conf
将其中的这一行删掉或注释:
[sslConfig]
# sslPassword = $7$MbkgV5dy...
重启 Splunk Forwarder:
$SPLUNK_HOME/bin/splunk restart
✅ 方案二:使用新的证书对重新部署(如果你不清楚旧密码)
如果你不知道当前 server.pem 的密码,推荐重新生成一个自签名证书并用它替换。
示例命令:
openssl req -x509 -newkey rsa:2048 -nodes \
-keyout $SPLUNK_HOME/etc/auth/server.key \
-out $SPLUNK_HOME/etc/auth/server.pem \
-days 365 \
-subj "/CN=forwarder.local"
确保生成的 server.pem 中包含公钥和私钥,且私钥是未加密的(即无密码)。
✅ 验证是否为加密 PEM:
grep "ENCRYPTED" $SPLUNK_HOME/etc/auth/server.pem
有输出,表示是带密码的 PEM(不能自动解密)
无输出,表示是未加密的(推荐)
✅ 最终目标:
使用未加密的 PEM 文件(支持自动启动)
清除 sslPassword 字段,避免 Splunk 启动时尝试解密
✅ 补充建议:
如果你是通过自动化脚本部署 splunkforwarder,强烈推荐使用无密码 PEM 证书,否则在每次 splunk start/restart 时都卡在“Enter PEM pass phrase”。
3、客户端配置
注释了 sslPassword 启动日志如下
[root@PRO-2 bin]# ./splunk restart
Stopping splunkd...
Shutting down. Please wait, as this may take a few minutes.
. [ OK ]
Stopping splunk helpers...
[ OK ]
Done.
Splunk> Be an IT superhero. Go home early.
Checking prerequisites...
Checking mgmt port [8089]: open
Checking conf files for problems...
Done
Checking default conf files for edits...
Validating installed files against hashes from '/data/app/app-run/prod/splunkforwarder/splunkforwarder-9.4.0-6b4ebe426ca6-linux-amd64-manifest'
All installed files intact.
Done
All preliminary checks passed.
Starting splunk server daemon (splunkd)...
PYTHONHTTPSVERIFY is set to 0 in splunk-launch.conf disabling certificate validation for the httplib and urllib libraries shipped with the embedded Python interpreter; must be set to "1" for increased security
Done
[ OK ]
[root@PRO-2 bin]#
从你提供的启动日志来看:
Starting splunk server daemon (splunkd)...
PYTHONHTTPSVERIFY is set to 0 in splunk-launch.conf ...
Done
[ OK ]
✅ 说明 Splunk Forwarder 已经成功启动,没有再出现 AES-GCM Decryption failed 等错误!
✅ 总结你的处理成果:
📌 补充建议:
你当前 PEM 已经可自动解密,无需再输入密码,非常适合生产部署和自动重启。
建议修改 splunk-launch.conf 中的 PYTHONHTTPSVERIFY 为 1,增强安全性:
vim $SPLUNK_HOME/etc/splunk-launch.conf
# 修改为
PYTHONHTTPSVERIFY=1
这样会启用 Python 内部使用的 HTTPS 证书校验(但若你使用自签名证书并未设置 CA,可暂时保留为 0)。
✅ 下一步你可以验证:
查看 forwarder 是否成功将日志送到 Splunk 服务器:
$SPLUNK_HOME/bin/splunk list forward-server
查看是否成功发送日志:
tail -f $SPLUNK_HOME/var/log/splunk/splunkd.log
如果你配置了 inputs.conf 上送日志,还可以 grep:
grep "sending event" splunkd.log
4、客户端启动
启动没有异常了,但是我在Spunk 服务端的 选择转发器列表怎么看不到 这个客户端呢?如何排查
我的经验之谈,出现这样的异常,先重启一下客户端,如果还出现异常,再继续下面的排查
你现在 Splunk Forwarder 已经启动成功,但 在 Splunk 服务端 “转发器列表” 中看不到它,说明:
客户端(Universal Forwarder)尚未成功注册到服务端索引器 或 没有建立 TCP 连接
✅ 排查方向总结
✅ 步骤一:客户端检查是否配置了服务端地址
查看 $SPLUNK_HOME/etc/system/local/outputs.conf 是否存在,内容是否类似于:
[tcpout]
defaultGroup = default-autolb-group
[tcpout:default-autolb-group]
server = 192.168.1.10:9997
[tcpout-server://192.168.1.10:9997]
server = 后是你服务端的 IP:port(通常是 9997)
如没有这个配置,Forwarder 就不知道把日志发给谁
✅ 查看命令:
cat $SPLUNK_HOME/etc/system/local/outputs.conf
如无内容,请告知我,我可以帮你生成。
✅ 步骤二:客户端查看是否连接成功
$SPLUNK_HOME/bin/splunk list forward-server
输出示例(连接成功):
Active forwards:
192.168.1.10:9997
Configured but inactive forwards:
None
若显示为 inactive:
多半是端口不通(防火墙或服务端未监听)
✅ 步骤三:服务端是否开启 9997 接收端口
登录服务端 Splunk(indexer 或 heavy forwarder)
确认是否启用了 TCP 数据接收:
进入 Web 控制台:
Settings -> Forwarding and receiving -> Configure receiving -> Add new
✔️ 确保 9997 在监听状态
或者登录服务端机器:
netstat -tunlp | grep 9997
✅ 步骤四:客户端是否能连通服务端端口
在客户端机器执行:
telnet <splunk-server-ip> 9997
# 或者
nc -zv <splunk-server-ip> 9997
如果连接不上,检查:
客户端防火墙(iptables、firewalld)
服务端防火墙
安全组(如云主机)
✅ 步骤五:客户端是否采集了任何日志(inputs.conf)
确认你的 Forwarder 是否有配置采集哪些日志:
查看:
cat $SPLUNK_HOME/etc/system/local/inputs.conf
应该包含类似:
[monitor:///var/log/messages]
sourcetype = syslog
index = main
✅ 如果都配置好了,服务端刷新 Forwarder 列表
前往服务端 UI:
Settings → Forwarding and receiving → Forwarder Management
⚠️ 如果你启用了 Deployment Server,还需确认:
客户端是否配置了 deploymentclient.conf
是否有 active deployment 连接
✅ 总结处理流程
如果你贴出:
你当前的 outputs.conf
服务端监听端口
splunk list forward-server 的输出结果
5、./splunk list forward-server
[root@PRO-2 bin]# ./splunk list forward-server
Your session is invalid. Please login.
Splunk username: admin
Password:
Active forwards:
10.12.10.248:9998
Configured but inactive forwards:
None
[root@PRO-2 bin]#
非常棒的反馈!从你提供的输出可以确认以下几点:
✅ 当前连接状态确认
Active forwards:
10.12.10.248:9998
Configured but inactive forwards:
None
✅ 说明:
Forwarder 已经成功连接到了服务端:10.12.10.248:9998
没有 inactive 转发目标,说明配置正确,网络正常,连接已建立
你现在要做的,不是排查连接问题,而是排查服务端为什么没显示这个 Forwarder
🧩 关键疑点:
为什么服务端 Forwarder 列表中看不到?
❗最常见的原因是:
你查看 Forwarder 列表的位置是 “Deployment Server 的管理页面”,而不是数据接收的 Indexer 页面。
✅ 分两种情况确认
✅ 情况一:你使用的是
单节点 Splunk(UI 登录地址为:10.12.10.248)
在这种情况下:
你访问的 Splunk Web UI 地址可能是 http://10.12.10.248:8000
请进入如下菜单查看 接收 Forwarder 数据状态:
Settings → Forwarding and receiving → Forwarder Monitoring
或者你可以在搜索栏中运行:
index=_internal source=*metrics.log* group=tcpin_connections
这将返回所有 与 indexer 建立连接的 forwarder 主机名 / IP。
✅ 情况二:你使用了
Deployment Server + Indexer 架构
Forwarder 只会出现在 “Forwarder Management” 页面里,前提是你客户端配置了:
deploymentclient.conf
示例内容:
[deployment-client]
clientName = my_forwarder
[target-broker:deploymentServer]
targetUri = 10.12.10.248:8089
路径为:
$SPLUNK_HOME/etc/system/local/deploymentclient.conf
如果没有这个配置,forwarder 不会注册到 Deployment Server,自然在 UI 的 “Forwarder Management” 列表中也不会显示。
✅ 建议下一步操作
✅ 1. 确认是否采集日志成功
在服务端 Splunk 搜索框中执行:
index=* host=PRO-2
或更精确:
index=* source=*messages* OR source=*app.log*
如果有结果,说明日志成功接收。
✅ 2. 确认服务端端口是 9998 而不是默认的 9997
你 forwarder 是配置到 10.12.10.248:9998,不是默认的 9997。
在服务端确认:
netstat -tunlp | grep 9998
并检查服务端的:
Settings → Forwarding and receiving → Configure receiving → Port 9998
确保确实在监听 9998。
✅ 3. 如果你想让 Forwarder 出现在 UI 的 Forwarder 列表(Deployment Server):
请手动配置:
vi $SPLUNK_HOME/etc/system/local/deploymentclient.conf
内容:
[deployment-client]
clientName = my_forwarder
[target-broker:deploymentServer]
targetUri = 10.12.10.248:8089
然后重启:
./splunk restart
之后它才会在 Web UI 的 “Forwarder Management” 页面中出现。
✅ 结论总结
6、标注客户端配置文件
一整套 Splunk Forwarder 的标准配置文件模板,涵盖以下内容:
✅ 1. outputs.conf
(配置 forwarder 发送日志到 indexer)
📌 路径:$SPLUNK_HOME/etc/system/local/outputs.conf
[tcpout]
defaultGroup = default-autolb-group
[tcpout:default-autolb-group]
server = 10.12.10.248:9998
[tcpout-server://10.12.10.248:9998]
✅ 2. inputs.conf
(配置 forwarder 要采集哪些日志)
📌 路径:$SPLUNK_HOME/etc/system/local/inputs.conf
[monitor:///var/log/messages]
sourcetype = syslog
index = main
[monitor:///data/logs/app.log]
sourcetype = app_log
index = main
📝 如你要采集其他路径,可在此处按需添加。
✅ 3. deploymentclient.conf
(配置 forwarder 注册到 Deployment Server)
📌 路径:$SPLUNK_HOME/etc/system/local/deploymentclient.conf
[deployment-client]
clientName = PRO-2-forwarder
[target-broker:deploymentServer]
targetUri = 10.12.10.248:8089
📌 配置完这个文件并重启后,你就能在 Splunk 服务端 UI 的 “Forwarder Management” 页面中看到该客户端。
✅ 4. 重启 Splunk Forwarder 应用配置
$SPLUNK_HOME/bin/splunk restart
✅ 5. 服务端验证操作
在 Splunk 服务端 Web UI 中:
搜索日志数据是否已收到:
index=* host=PRO-2
检查 Forwarder 是否已注册:
Settings → Forwarder management
✅ 可选增强项
如你想使用以下高级功能:
自定义索引名(index = your_custom_index)
使用 whitelist/blacklist 控制日志文件名
定时轮询日志目录(crcSalt, ignoreOlderThan)
配置文件
内容包含:
outputs.conf
inputs.conf
deploymentclient.conf
你只需将这些文件放到 Forwarder 的路径中:
$SPLUNK_HOME/etc/system/local/
然后执行:
$SPLUNK_HOME/bin/splunk restart
即可立即生效。如果还需要添加过滤规则、索引路由、黑白名单等增强配置,待再深入研究!
评论区