Logstash无法向MongoDB发送日志的授权报错问题求解
问题解决方案
你遇到的报错核心是MongoDB身份认证校验未通过,与Logstash采集链路无关(文件输出正常已证明采集侧无问题),可按照以下步骤依次排查解决:
- 新增
authSource参数到MongoDB连接URI
你当前URI未指定账号校验的认证库,MongoDB默认会从URI后缀的业务库somelogs中校验账号,如果你创建my-user账号时是在admin库下注册的,就会出现校验失败的问题。修改配置中的uri字段,补充认证库参数:
uri => "mongodb://my-user:my-password@127.0.0.1:27017/somelogs?authSource=admin"
如果你的账号是直接在somelogs库下创建的,将参数值改为authSource=somelogs即可。
- 直接校验账号权限有效性
使用Mongo shell执行连接+写入测试,确认账号本身权限配置正确:
# 替换为你的实际账号密码和authSource值 mongo "mongodb://my-user:my-password@127.0.0.1:27017/somelogs?authSource=admin"
进入Mongo shell后执行测试写入:
db.logs.insert({"test_key":"test_value"})
如果写入报错,说明账号权限配置缺失,使用管理员账号登录Mongo后重新授权:
use admin // 管理员身份认证,替换为你的管理员账号密码 db.auth("admin_user","admin_pass") use somelogs // 给目标账号授予业务库读写权限 db.grantRolesToUser("my-user", ["readWrite"])
移除冗余配置项
你当前配置中的codec => "json"属于冗余参数,MongoDB输出插件会自动适配Logstash事件格式,额外指定json codec可能引发格式冲突,直接删除该行配置即可。校验MongoDB服务端配置
如果上述操作都无效,检查MongoDB配置文件:确认security.authorization已正确开启,bindIp参数未限制127.0.0.1的访问请求,未配置额外IP白名单拦截Logstash的访问。
内容的提问来源于stack exchange,提问作者Dhody Rahmad Hidayat
相关产品推荐
相关产品推荐

