部署 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"
elasticsearch
和 kibana
的版本要统一。同样的,前面的 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 Elasticsearches = 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: falseoutput.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 能够跳过这一步)