侧边栏壁纸
博主头像
ProSayJ 博主等级

Talk is cheap. Show me the code.

  • 累计撰写 43 篇文章
  • 累计创建 16 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Splunk专项-客户端日志采集

YangJian
2025-06-27 / 0 评论 / 0 点赞 / 21 阅读 / 0 字

下面是昨天晚上配置日志采集过程中遇到的问题以及通过“智能助手”解决问题的过程~~

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!

是加密模块尝试解密失败时的通用错误,通常出现于以下场景:

场景

说明

✅ 配置中使用了 SSL/TLS(server.pem 带有加密)

且未提供正确的解密密码

❌ cert.pem / privkey.pem 损坏

PEM 文件损坏或格式不对

❌ 配置引用了错误路径的加密文件

Splunk 配置中指向了无效的 cert 或 key

✅ 安装过程中指定了密码保护密钥但未配置自动解密

导致启动时每次都要求 passphrase,但你没有正确输入或 PEM 损坏


✅ 解决思路

✅ 方案 1:检查

server.pem

是否加密(推荐)

查看 server.pem 是否使用了 passphrase 加密:

cat $SPLUNK_HOME/etc/auth/server.pem | head -n 10

如果你看到:

-----BEGIN ENCRYPTED PRIVATE KEY-----

说明这个私钥是加密的,需要密码才能解锁。

🔧 解决办法:

  1. 尝试使用 OpenSSL 重新导出未加密私钥

openssl rsa -in server.pem -out server_unencrypted.pem

输入正确 passphrase 后,生成了新的无加密私钥。

  1. 备份并替换旧私钥

cp server.pem server.pem.bak
cp server_unencrypted.pem server.pem
  1. 重启 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 解密失败的问题。


✅ 总结处理流程:

  1. 确认 server.pem 是否加密(看是否含有 ENCRYPTED PRIVATE KEY)

  2. 若是加密的,用 openssl 解密导出非加密版本

  3. 替换 server.pem 并重启

  4. 如果配置引用了无效证书路径,修复 server.conf 中 [sslConfig] 的路径配置

  5. 如需要自动化部署,务必使用未加密 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 文件

(推荐,自动部署友好)

步骤:

  1. 备份当前证书:

cp $SPLUNK_HOME/etc/auth/server.pem $SPLUNK_HOME/etc/auth/server.pem.bak
  1. 提取未加密的私钥 PEM(需知道原来的密码):

openssl rsa -in $SPLUNK_HOME/etc/auth/server.pem -out $SPLUNK_HOME/etc/auth/server_unencrypted.pem

系统会提示你输入原始 passphrase。如果你不知道这个密码,无法解密,只能重建。

  1. 替换 PEM 文件:

cp $SPLUNK_HOME/etc/auth/server_unencrypted.pem $SPLUNK_HOME/etc/auth/server.pem
  1. 清除 sslPassword 字段(重点)

编辑:

vi $SPLUNK_HOME/etc/system/local/server.conf

将其中的这一行删掉或注释:

[sslConfig]
# sslPassword = $7$MbkgV5dy...
  1. 重启 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 等错误!


✅ 总结你的处理成果:

项目

结果

sslPassword 注释处理

✅ 正确

PEM 文件已解密或无加密

✅ 成功识别

Splunk Forwarder 启动

✅ 成功

异常日志(AES-GCM)

✅ 消除


📌 补充建议:

  1. 你当前 PEM 已经可自动解密,无需再输入密码,非常适合生产部署和自动重启。

  2. 建议修改 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 连接


✅ 排查方向总结

排查项

是否必查

说明

✅ 客户端是否配置了 outputs.conf

设置数据要发往哪台 Splunk 服务端

✅ 服务端是否允许接收 forwarder 数据(端口监听)

默认监听 9997 端口(接收 TCP Forwarder 数据)

✅ 网络通不通

客户端能否连接服务端的 9997 端口

✅ 客户端是否真正连接成功

用 list forward-server 命令查看连接状态


✅ 步骤一:客户端检查是否配置了服务端地址

查看 $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 接收端口

  1. 登录服务端 Splunk(indexer 或 heavy forwarder)

  2. 确认是否启用了 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 连接


✅ 总结处理流程

检查点

命令/动作

查看 Forwarder 是否连接服务端

splunk list forward-server

配置服务端地址

outputs.conf 是否配置正确

服务端是否监听

`netstat -tunlp

网络是否通

telnet <ip> 9997

服务端是否配置 Forwarding 接收

Splunk Web UI 中配置


如果你贴出:

  • 你当前的 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

✅ 说明:

  1. Forwarder 已经成功连接到了服务端:10.12.10.248:9998

  2. 没有 inactive 转发目标,说明配置正确,网络正常,连接已建立

  3. 你现在要做的,不是排查连接问题,而是排查服务端为什么没显示这个 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” 页面中出现。


✅ 结论总结

项目

状态

Forwarder 是否连接成功

✅ 成功连接 10.12.10.248:9998

是否采集日志

建议 index=* host=PRO-2 验证

是否出现在 UI Forwarder 列表

❌ 若未配置 deploymentclient.conf,不会出现

是否需要配置 deployment 连接

✅ 若你要使用部署管理功能(如部署 app、配置集中管理)



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 中:

  1. 搜索日志数据是否已收到:

index=* host=PRO-2
  1. 检查 Forwarder 是否已注册:

Settings → Forwarder management



✅ 可选增强项

如你想使用以下高级功能:

  • 自定义索引名(index = your_custom_index)

  • 使用 whitelist/blacklist 控制日志文件名

  • 定时轮询日志目录(crcSalt, ignoreOlderThan)

配置文件

📎splunk-forwarder-config.zip

📎生产级配置.zip

内容包含:

  • outputs.conf

  • inputs.conf

  • deploymentclient.conf

你只需将这些文件放到 Forwarder 的路径中:

$SPLUNK_HOME/etc/system/local/

然后执行:

$SPLUNK_HOME/bin/splunk restart

即可立即生效。如果还需要添加过滤规则、索引路由、黑白名单等增强配置,待再深入研究!

0

评论区