关于python:裸机使用-filebeat-采集裸机上的日志文件并发到-elasticsearch

52次阅读

共计 3826 个字符,预计需要花费 10 分钟才能阅读完成。

部署 elasticsearch 和 kibana

因为是 demo 性质的应用,所以就用 docker-compose 简略跑一下

version: "3"
services:
  elk-elasticsearch:
    container_name: elk-elasticsearch
    image: elasticsearch:7.17.1
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g" # 限度 es 的内存大小,不然会吃掉 10GB+ 的 RAM


  elk-kibana:
    container_name: elk-kibana
    image: kibana:7.17.1
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://192.168.31.245:9200
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml # kibana 其实是反对中文的,只有在 /usr/share/kibana/config/kibana.yml 加一行 i18n.locale: "zh-CN"

elasticsearchkibana 的版本要统一。同样的,前面的 filebeat 也要版本统一!

这次咱们都用 7.17.1

如果须要用 dbeaver 之类的工具连贯 elasticsearch 遇到 current license is non-compliant for [jdbc],能够参考:current license is non-compliant for jdbc 解决!

创立索引

一开始,我参考了这个教程:EFK 搭建简略的日志剖析零碎

不得不说这个教程写的十分的烂,缺斤短两,但即便如此,这曾经还是谷歌搜寻进去排名靠前


部署好了 elasticsearch 和 kibana 之后,咱们须要去 elasticsearch 创立索引

为什么须要创立索引(index)?
index 这个概念在 elasticsearch 中就相当于 mysql 中的 table(elasticsearch 没有 db 这个概念)。次要留神的是,elasticsearch 的 index,创立的时候,只给一个 index name 就能够,不须要定义 schema。
咱们须要 index 作为日志的存储容器,不同 index 存储不同 project 或者说不同业务的日志。总不能把所有日志都存在同一个 index 吧!

怎么创立索引?办法有很多,比方:

  • 通过 dbeaver,连贯到 elasticsearch,而后在 dbeaver 为 elasticsearch 创立索引
  • 应用 kibana 连贯到 elasticsearch,而后在 kibana 为 elasticsearch 创立索引
  • 应用 python、java 等编程语言提供的 elasticsearch client sdk 间接连贯到 elasticsearch 创立索引

我抉择 python,因为我对这个最相熟

python 的 elasticsearch client sdk 版本也要版本保持一致!

pip install elasticsearch==7.17.1

对于如何应用 elasticsearch client sdk 操作 elasticsearch,能够参考这篇文章: Elasticsearch 根本介绍及其与 Python 的对接实现(这个文章中的 elasticsearch client sdk 比拟老,所以一些 api 的参数名等等都产生了变动了)

上面给几个参考代码:

创立 index, 我这里就叫做 ideaboom

from elasticsearch import Elasticsearch


es = Elasticsearch("http://192.168.31.245:9200")
result = es.indices.create(index='ideaboom')
print(result)

这里很简略,实际上,你还须要增加一些参数,比方指定 index 的『正本数』、『分片数』。比方你的 elasticsearch 集群有 3 个 node,那『分片数』就应该是 3 的倍数,这样能力更好的利用集群的资源!

裸机应用 filebeat 采集裸机上的日志文件,并发到 elasticsearch

先装置 filebeat

参考:Filebeat quick start: installation and configuration

在 debian 系中装置 filebeat7.17.1

下载:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.1-amd64.deb

超级快,都不须要代理

装置:

sudo apt install ./filebeat-7.17.1-amd64.deb

应用 filebeat 采集数据,并发送到 elasticsearch

对于 filebeat 的语法,能够参考:filebeat 输入后果到 elasticsearch 的多个索引

我的 filebeat.yml 内容如下:

filebeat.inputs:
  - type: log
    # Change to true to enable this input configuration.
    enabled: true
    # Paths that should be crawled and fetched. Glob based paths.
    paths:
      # 日志理论门路地址
      - /home/bot/Desktop/coder/ideaboom/test_ELK_EFK/logs/run.log
    fields:
      # 日志标签,区别不同日志,上面建设索引会用到
      type: "ideaboom"
    fields_under_root: true
    # 指定被监控的文件的编码类型,应用 plain 和 utf- 8 都是能够解决中文日志的
    encoding: utf-8

# setup.kibana:
#   host: "192.168.31.245:5601"
setup.ilm.enabled: false

output.elasticsearch:
  hosts: ["192.168.31.245:9200"]
  indices:
       #索引名称,个别为‘服务名称 +ip+ --%{+yyyy.MM.dd}’。- index: "ideaboom-%{+yyyy.MM.dd}"  
      when.contains:
      #标签,对应日志和索引,和下面对应
        type: "ideaboom"

后面曾经在 elasticsearch 创立了名为 ideaboom 的 index

采集的是 run.log 文件,我往这个文件中轻易放一点货色:

2022-07-08 02:39:39,746 - 13651 - logger - INFO - total [1] urls, max_id [69013414]
2022-07-08 02:39:39,746 - 13651 - logger - INFO - total [1] urls, max_id [69013415]
2022-07-08 02:39:39,746 - 13651 - logger - INFO - total [1] urls, max_id [69013414]
2022-07-08 02:39:39,746 - 13651 - logger - INFO - total [1] urls, max_id [69013415]
2022-07-08 02:39:39,746 - 13651 - logger - INFO - total [1] urls, max_id [69013414]
2022-07-08 02:39:39,746 - 13651 - logger - INFO - total [1] urls, max_id [69013415]

相似 nginx,咱们须要把本人的 yml 映射到 filebeat 的默认配置文件门路

sudo cp /home/bot/Desktop/coder/ideaboom/test_ELK_EFK/filebeat.yml /etc/filebeat/filebeat.yml

对于默认配置文件门路的问题,能够参考:为什么应用了 -c 参数,filebeat 还是去加载 etc 中的 filebeat.yml?

运行 filebeat

sudo filebeat       

留神,运行 filebeat 有很多的坑,filebeat 为了所以的数据安全,要求 root 运行 filebeat,如果不是 root 运行,相干的配置文件的 owner 必须要是运行 filebeat user 保持一致等等。不然会遇到 ubuntu debian Exiting: error loading config file: open /etc/filebeat/filebeat.yml: permission denied 相似的报错!

还有一点须要超级留神,filebeat 是没有输入的,就是不论有没有采集到日志,有没有把日志发送到 elasticsearch 他都不会通知你!(可能有方法能够晓得,然而我不晓得怎么搞),这就很坑,为了晓得 filebeat 有没有失常工作,我还特意开了 wireshark 来抓包!

在 elasticsearch 中查看日志

假如,到这一步的时候,你的 filebeat 曾经胜利才采集到了日志,并且胜利将日志发送到了 elasticsearch

咱们能够在 dbeaver 中查看(如果没有装置 dbeaver 能够跳过这一步)

在 kibana 查看日志

正文完
 0