Filebeat写ElasticSearch故障排查思路(下)

#作者:程宏斌

接上篇:链接: 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 索引配置(如字段限制、刷新间隔)

  1. ElasticSearch的index.mapping.total_fields.limit限制
    如果一个索引的字段数目过多,可能会超过ElasticSearch的默认限制index.mapping.total_fields.limit,从而导致写入失败。可以检查并增加此限制。

  2. 查看当前的限制:

    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
  }
}'
  1. ElasticSearch的index.translog.durability配置

    ElasticSearch会使用事务日志(translog)来确保数据一致性。如果index.translog.durability配置不当,可能导致数据丢失或写入失败。通常,默认的translog.durability设置为async,如果遇到写入问题,可以考虑调整此设置。

  2. 查看当前设置:

    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"
  }
}'
  1. 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 磁盘空间和资源使用

  1. 如果ElasticSearch的磁盘空间不足,集群可能会设置索引为read-only状态,导致无法写入数据。检查磁盘空间并确认是否有足够的空间。

  2. 确认索引是否处于只读状态:

    curl -X GET "localhost:9200/_cat/indices?v"

  3. 如果某个索引处于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 安全设置(如用户认证、权限)

  1. 如果启用了ElasticSearch的安全功能(如X-Pack或其他认证方式),确保filebeat有正确的权限来写入数据。检查以下配置:

output.es.username 和 output.es.password确保在filebeat配置中使用了正确的用户名和密码。

  1. 检查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错误或索引问题)

五、修复建议

相关推荐
Leinwin4 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382504 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇4 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7594 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣4 小时前
智能体选型实战指南
运维·人工智能
yy55274 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ5 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
Volunteer Technology7 小时前
中间件场景题归纳
中间件·面试·架构
05大叔7 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密7 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器