#作者:程宏斌
接上篇:链接: link
文章目录
- 三、Filebeat组件排查
-
- (一)配置检查
-
- [3.1.1 是否启用了有效的输入配置](#3.1.1 是否启用了有效的输入配置)
- [3.1.2 output输出配置检查](#3.1.2 output输出配置检查)
- (二)日志检查
-
- [3.2.1 是否有报错日志(如connection relastic searchet、timeout、bulkfail、403、429等)?](#3.2.1 是否有报错日志(如connection relastic searchet、timeout、bulkfail、403、429等)?)
- [3.2.2 filebeat采集状态](#3.2.2 filebeat采集状态)
- [3.2.3 Harvester状态(每个日志文件的读取状态)](#3.2.3 Harvester状态(每个日志文件的读取状态))
- [3.2.4 Output(ElasticSearch写入状态)](#3.2.4 Output(ElasticSearch写入状态))
- 四、ElasticSearch组件排查
-
- (一)配置检查
-
- [4.1.1 集群健康状态](#4.1.1 集群健康状态)
- [4.1.2 索引配置(如字段限制、刷新间隔)](#4.1.2 索引配置(如字段限制、刷新间隔))
- [curl -X GET "localhost:9200/my-index/_settings"](#curl -X GET "localhost:9200/my-index/_settings")
-
-
- [4.1.3 磁盘空间和资源使用](#4.1.3 磁盘空间和资源使用)
- [4.1.4 安全设置(如用户认证、权限)](#4.1.4 安全设置(如用户认证、权限))
- [4.1.5 索引模板和映射](#4.1.5 索引模板和映射)
- (二)日志检查
-
- 五、修复建议
三、Filebeat组件排查
(一)配置检查
3.1.1 是否启用了有效的输入配置
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
(1)检查是否 enabled: true。
(2)paths是否正确(是否存在文件、路径通配是否合理)。
3.1.2 output输出配置检查
(1)hosts es地址是否正确,能否连通?
(2)username/password是否有写权限?认证方式是否匹配?
(3)ssl.*是否启用了SSL,证书是否配置完整?
(4)pipeline若配置了Ingest Pipeline,pipeline是否存在且有效?
(5)index索引是否符合命名规范、无冲突?
(6)bulk_max_size是否设置过小导致频繁 flush(默认 50)
(7)并发worker数是否合理?(默认 1)
(二)日志检查
3.2.1 是否有报错日志(如connection relastic searchet、timeout、bulkfail、403、429等)?
3.2.2 filebeat采集状态
"filebeat": {
"events": {
"added": 2417,
"done": 2417
},
added:采集到的事件数
done:已处理完成的事件数
说明filebeat已成功处理这2417条日志。
3.2.3 Harvester状态(每个日志文件的读取状态)
"harvester": {
"files": {
...
"/var/log/dnf.log": {
"read_offset": 564955,
"size": 564955,
"last_event_published_time": "...",
...
}
},
"open_files": 6,
"running": 6,
"started": 6
}
有6个文件在被采集,且都有read_offset和 last_event_published_time,没有卡死或跳过,说明文件被正常读取和处理。
3.2.4 Output(ElasticSearch写入状态)
"output": {
"type": "ElasticSearch",
"events": {
"acked": 2391,
"total": 2391
},
"write": {
"bytes": 1962961
}
}
acked = total表示ElasticSearch成功确认写入约2MB数据,若有问题,通常会看到retry、failures数值上升,但这里没有。
整理日志检查项:

四、ElasticSearch组件排查
(一)配置检查
在检查es的配置时,关注以下几个方面:
4.1.1 集群健康状态
# curl -X GET "localhost:9200/_cluster/health?pretty"
- 绿色 (green):所有分片都分配并且副本分片也存在。
- 黄色 (yellow):所有分片都已分配,但副本分片未分配(可能因为只有一个节点)。
- 红色 (red):有分片没有分配。
- 如果集群的状态为red,需要排查分片分配、节点故障或其他问题。
4.1.2 索引配置(如字段限制、刷新间隔)
-
ElasticSearch的index.mapping.total_fields.limit限制
如果一个索引的字段数目过多,可能会超过ElasticSearch的默认限制index.mapping.total_fields.limit,从而导致写入失败。可以检查并增加此限制。 -
查看当前的限制:
curl -X GET "localhost:9200/_settings"
如果需要增加字段限制,可以修改ElasticSearch.yml中的配置,或者为特定索引设置更高的字段限制:
# curl -X PUT "localhost:9200/my-index/_settings" -H 'Content-Type: application/json' -d '{
"settings": {
"index.mapping.total_fields.limit": 2000
}
}'
-
ElasticSearch的index.translog.durability配置
ElasticSearch会使用事务日志(translog)来确保数据一致性。如果index.translog.durability配置不当,可能导致数据丢失或写入失败。通常,默认的translog.durability设置为async,如果遇到写入问题,可以考虑调整此设置。
-
查看当前设置:
curl -X GET "localhost:9200/_settings"
修改设置为async(如果它是request,可能导致每个请求都等待写入确认):
# curl -X PUT "localhost:9200/my-index/_settings" -H 'Content-Type: application/json' -d '{
"settings": {
"index.translog.durability": "async"
}
}'
- ElasticSearch的index.refresh_interval配置
如果发现写入操作后,数据无法立即在搜索中显示,可以检查index.refresh_interval。默认情况下,它设置为1秒,如果配置为较长的时间,可能会影响数据的可见性。
查看当前设置:
curl -X GET "localhost:9200/my-index/_settings"
如果需要调整refresh_interval,可以将其设置为1s:
# curl -X PUT "localhost:9200/my-index/_settings" -H 'Content-Type: application/json' -d '{
"settings": {
"index.refresh_interval": "1s"
}
}'
4.1.3 磁盘空间和资源使用
-
如果ElasticSearch的磁盘空间不足,集群可能会设置索引为read-only状态,导致无法写入数据。检查磁盘空间并确认是否有足够的空间。
-
确认索引是否处于只读状态:
curl -X GET "localhost:9200/_cat/indices?v"
-
如果某个索引处于read_only状态,可以通过以下命令解除只读状态:
curl -X PUT "localhost:9200/my-index/_settings" -H 'Content-Type: application/json' -d '{
"settings": {
"index.blocks.read_only": null
}
}'
4.1.4 安全设置(如用户认证、权限)
- 如果启用了ElasticSearch的安全功能(如X-Pack或其他认证方式),确保filebeat有正确的权限来写入数据。检查以下配置:
output.es.username 和 output.es.password确保在filebeat配置中使用了正确的用户名和密码。
-
检查ElasticSearch用户的角色,确保其有写入权限。如果使用了角色基础访问控制(RBAC),确保filebeat的用户有访问写入的权限。
output.es:
hosts: ["http://localhost:9200"]
username: "elastic"
password: "password"
4.1.5 索引模板和映射
elsticsearch可能会使用模板来自动创建索引。如果filebeat的日志字段与现有模板不兼容,可能导致写入失败。可以查看ElasticSearch的模板配置,并确保与filebeat的数据结构兼容。
查看索引模板:
# curl -X GET "localhost:9200/_template/*?pretty"
如果需要修改模板或重新加载模板,可以使用以下命令:
# curl -X PUT "localhost:9200/_template/filebeat?pretty" -H 'Content-Type: application/json' -d '{
"template": {
"mappings": {
"properties": {
"message": { "type": "text" },
"timestamp": { "type": "date" }
}
}
}
}'
(二)日志检查
(1)index read-only/allow delete 磁盘位过高,索引被自动设置为只读
(2)mapper_parsing_exception 索引字段类型冲突
(3)unauthorized/forbidden 权限或认证配置错误
(4)circuit_breaking_exception 内存不足,超过JVM heap限制,写入被中断
(5)too_many_fields_exception 字段数量超过默认限制(默认1000)
(6)rejected execution 写入速率过高,线程池爆满
(7)bulk request failed 批量写入失败(可能是mapping错误或索引问题)
五、修复建议
