logstash启动时默认连接本机节点elasticsearch问题

背景

今天在排查处理一个logstash读取kafka数据写入到hdfs的问题时候,发现在启动日志中多了个 logstash.outputs.elasticsearch 连接的地址是localhost:9200

部分日志如下:

logstash-elasticsearch-localhost-error

排查过程说明

1、首先确认 logstash 启动的配置文件中的 output 配置,确认只配置了 webhdfs


output {
	webhdfs {
		host => 'xxxx',
		port => 50075,
		standby_host => 'yyy',
		standby_port => 50075,
		path => 'xxxx',
	}
}

2、网上查询给出两种解决方案

第一种说在output配置中添加 stdout

output {
  stdout {
    codec => dots
  }
}

但是实际这边是封装的管理logstash的脚本,里面 标准输出是写入到 /dev/null 中去。

实际使用命令行参数也启动做了尝试,不起作用。

第二是说是加载了默认的 elasticsearch 插件,卸载该插件即可。

这里其实就有个疑问?为什么默认会只加载 elasticsearch输出源的插件,而不是其他呢?

但是实际卸载的时候,会提示依赖于 x-pack 插件

[root@xxxxxx logstash]# bash bin/logstash-plugin remove logstash-output-elasticsearch
Failed to remove "logstash-output-elasticsearch" because the following plugins or libraries depend on it:

* x-pack

3、根据上面提示,联系到观察启动日志的时候,它有两个地方提示到了 x-pack

3.1) /_xpack/monitoring/_bulk

[2023-06-08T16:54:05,541][WARN ][logstash.outputs.elasticsearch] You are using a deprecated config setting 
... ...
:plugin=><LogStash::Outputs::ElasticSearch hosts=>[http://localhost:9200], bulk_path=>"/_xpack/monitoring/_bulk?system_id=logstash&system_api_version=2&interval=1s", .... ...}

3.2)、logstash.modules.scaffold 模块加载时

[2023-06-08T16:54:00,332][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"arcsight", :directory=>"/opt/app/logstash/vendor/bundle/jruby/2.3.0/gems/x-pack-6.2.2-java/modules/arcsight/configuration"}

通过上面的例子,知道应该是加载 x-pack, 但是x-pack有依赖于 elasticsearch ,所以在未配置 elasticsearch输出源的情况,就默认去找 localhost:9200 了

解决办法

就是在 logstash的配置中禁用 xpack monitor

# logstash.yml
xpack.monitoring.enabled: false

该配置文件如果在 logstsah/config 目录下没有,可以手动新增一个,和启动logstash -f指定的配置文件不冲突

附赠上面提到的 logstash 服务管理脚本


如果觉得文章对你有用,请不吝点赞 和 关注个人公众号(搜索 全栈运维 或者 DailyJobOps

Logstash 中配置连接Elasticsearch 8.18.2,需要确保 `output` 插件中的配置项与目标 Elasticsearch 实例的版本兼容,并正确指定连接参数。以下是一个针对 Elasticsearch 8.18.2Logstash 输出配置示例: ```ruby output { elasticsearch { hosts => ["http://192.168.197.130:9200"] index => "server-%{+YYYY.MM.dd}" user => "elastic" password => "123456" ssl_certificate_verification => false ilm_rollover_alias => "server-logs" ilm_policy => "server_logs_policy" } } ``` ### 配置说明: - **hosts**:定义了 Logstash 将数据发送到的 Elasticsearch 节点地址。确保该地址与 Elasticsearch 8.18.2 实例的监听地址一致[^1]。 - **index**:设置数据写入时使用的索引模板名称。此处使用了日期格式化表达式 `%{+YYYY.MM.dd}`,表示每天创建一个新的索引。 - **user / password**:用于认证的用户名和密码。Elasticsearch 8.x 版本默认启用了安全功能,因此必须提供具有适当权限的凭据[^1]。 - **ssl_certificate_verification**:如果使用了 HTTPS 并且希望跳过证书验证(不推荐用于生产环境),可以设置为 `false`。在生产环境中应使用有效证书并启用验证。 - **ilm_rollover_alias / ilm_policy**:用于指定 ILM(Index Lifecycle Management)策略和滚动更新别名。这些功能在 Elasticsearch 8.x 中得到了进一步增强,可用于优化索引生命周期管理[^4]。 ### 启动 Logstash 容器 确保 Logstash 配置文件挂载到容器中,并映射正确的端口: ```bash docker run -it -d \ --name logstash \ -p 9600:9600 \ -p 5044:5044 \ -v /home/ubuntu/logstash/config:/usr/share/logstash/config \ -v /home/ubuntu/logstash/pipeline:/usr/share/logstash/pipeline \ docker.elastic.co/logstash/logstash:8.18.2 ``` 该命令将 Logstash 配置目录挂载进容器,并启动 Logstash 容器,使用 Elasticsearch 8.18.2 的官方镜像。 ### 注意事项: - 确保 LogstashElasticsearch 版本兼容。Logstash 8.18.2Elasticsearch 8.18.2 完全兼容,支持其所有特性,包括 ILM、安全认证等[^1]。 - 如果启用了安全功能(如 TLS/SSL、身份验证),请确保 Logstash 配置中包含正确的安全参数。 - 建议在生产环境中使用 HTTPS 和有效的证书,以保障数据传输的安全性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值