k8s,filebeat将主机所有容器的控制台日志写入ES中,不成功?


这个是我的filebeat的配置。
image.png
这个是我运行的filebeat服务的日志
image.png
这是我容器中的日志地址
image.png
这个是我在kibana上的索引。

按上面的操作

来说我这边应该已经将主机中所有启动的容器服务中的日志文件写入es中的“
test_index1”中的。可是没有写入。filebeat服务启动也正常的去监视获取了“/app/logs/*.jar.log”日志中的数据写入es中,但是不成功,es中的索引文件大小不变。到底是哪里出了问题呢?

新的内容

image.png
image.png
image.png
这是filebeat启动时无法连接ES的问题

阅读 878
avatarAI BotBETA

基于你提供的信息,要解决这个问题可能需要进行以下步骤:

  1. 检查 Filebeat 配置:首先确认 Filebeat 的配置文件是否正确。特别是,要确保日志路径和正则表达式匹配你的容器日志文件。你的配置文件中的 /app/logs/*.jar.log 是否是正确的日志文件路径?同时,如果你是想监控所有容器的日志,那么这个路径应该是一个可以被所有容器访问的通用路径,而不是某个特定容器的日志路径。
  2. 检查权限问题:Filebeat 需要有足够的权限来读取你的日志文件。确保 Filebeat 运行的用户有读取这些日志文件的权限。
  3. 检查 Elasticsearch 配置:确认 Elasticsearch 是否已经正确地接收到 Filebeat 的输入。在 Elasticsearch 的配置中,应该有一个部分指定了 Filebeat 可以将日志发送到哪里。
  4. 检查日志:查看 Filebeat 和 Elasticsearch 的日志,看看是否有任何错误或警告。这可能会给你提供一些关于问题的线索。
  5. 检查索引:尽管你的 Elasticsearch 索引文件大小没有变化,但并不一定意味着没有数据被写入。可能只是数据没有被正确地写入到你预期的索引中。检查一下是否有其它的索引被创建,或者数据被写入了错误的地方。
  6. 测试一个小规模的环境:如果问题仍然存在,尝试在一个更小的环境中测试你的设置。例如,你可以在一个单一的主机上运行几个容器,并尝试将日志发送到 Elasticsearch。这样可以帮助你确定问题是否与特定的环境或配置相关。

在你提供更详细的信息(例如具体的错误消息、Elasticsearch和Filebeat的配置等)之前,以上是对你当前问题的一些基本建议。

2 个回答

主机上的目录需要挂载到容器中,container 才可以看到。否则 container 读不到主机上的任何内容,因为 container 内部的文件系统与主机的文件系统时独立的。

每一个需要读取主机内容的 container 都要挂载它读取的目录或文件。


需要写主机目录或文件的 container 的也是必须挂载之后才能写到主机上的。否则只能写到 container 内部,主机上看不到。比如如果有日志期望可以在主机上直接查看的话,就得把主机上的一个目录挂载到 container 中的日志目录上。


pod 中是可以有多个 container 的,每一个需要读取相关目录的 container 必须单独挂载主机目录。

额,你的filebeat是deamonset部署还是直接部署在主机上?filebeat要和你的应用同一个容器才能读到数据,或者采用边车概念(单应用多容器)统一挂载一个emptydir,共享日志目录,filebeat就可以读取到了。配置如下:

emptyDir

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: app:latest
    name: app
    volumeMounts:
    - mountPath: /app/logs
      name: log-volume
  - image: filebeat:latest
    name: filebeat
    volumeMounts:
    - mountPath: /app/logs
      name: log-volume
  volumes:
  - name: log-volume
    emptyDir:
      sizeLimit: 500Mi
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏