介绍
各部分功能
ElasticSearch
elasticsearch是Elastic Stack的核心,它是一个分布式、RESTful 风格的搜索和数据分析引擎,能够集中存储并快速搜索大量的数据。它不仅包括了全文搜索功能,还可以进行以下工作:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
Logstash
Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响,大致可分为输入、过滤器、输出三块功能。
- 输入
- 数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash支持各种输入选择,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种云主机中采集数据。
- 过滤器
- 数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。
- 输出
- 尽管Elasticsearch是首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。Logstash提供众多输出选择,可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。
Kibana
一张图表胜过千万行日志。Kibana可以对日志数据做多种需求的可视化,界面漂亮,功能强大。
Filebeat
由于Logstash体量较大,一般使用Filebeat作为日志采集的客户端,转发和汇总日志信息。当将数据发送到 Logstash 或 Elasticsearch 时,Filebeat 使用背压敏感协议,以应对更多的数据量。如果 Logstash 正在忙于处理数据,则会告诉 Filebeat 减慢读取速度。一旦拥堵得到解决,Filebeat 就会恢复到原来的步伐并继续传输数据。
架构
一般架构
beats作为采集日志的客户端安装在各处,通过接口上报数据给Logstash做过滤等处理。Logstash将数据上报给ElasticSearch做索引和存储,Kibana再从ElasticSearch检索数据。
生产环境基本架构
根据业务日志量大小可配置缓存放置采集的日志,再从缓存中消化处理日志。
生产环境高级架构
- 热数据:当日数据,有读有写,频繁读取
- 温数据:2 ~ 7 日数据,偶尔读取
- 冷数据:8 ~ 30 日数据,极少读取
ELKB安装(CentOS环境)
下载相应的rpm包,使用命令 sudo rpm -ivh kibana-7.3.1-x86_64.rpm
安装相应的包。
注意elasticsearch
以及logstash
需要java
环境,sudo yum install java-1.8.0-openjdk
即可安装java
环境。
Kibana配置
1 | sudo vim /etc/kibana/kibana.yml |
1 | server.port: 5601 |
界面上的Logs模块,需要添加记录数据的indices才能看到数据
启动Kibana服务并设置开机启动
1 | sudo systemctl start kibana.service |
ElasticSearch配置
sudo vim /etc/elasticsearch/elasticsearch.yml
1 | cluster-name: my-application |
1 | sudo systemctl start elasticsearch.service |
检验是否启动
1 | curl localhost:9200 |
1 | { |
Filebeat 系统日志配置
sudo vim /etc/filebeat/filebeat.yml
1 | output.elasticsearch: |
下面是一个收集系统日志的例子,使用命令
1 | sudo filebeat modules enable system |
启用自带的系统日志配置,这时 /etc/filebeat/modules.d/system.yml.disabled
自动变为 /etc/filebeat/modules.d/system.yml
1 | sudo filebeat setup |
Filebeat 项目日志配置
假设项目在Ubuntu服务器上,下载安装包到该服务器上后使用
1 | sudo dpkg -i filebeat-7.3.1-amd64.deb |
安装Filebeat客户端。编辑 /etc/filebeat/filebeat.yml
1 | - type: log |
如不需要host_metadata和cloud_metadata等数据,把下面的这部分配置注释掉,最后存下来的数据也会大大减少
1 | #processors: |
如上配置所示,Filebeat
收集了 /var/log/supervisor/
下面所有 allinc
开头以及 caco
开头的日志,并设置不同的标签以及索引名称。我们使用这个索引名称在 Logstash
中对不同来源的日志设置不同的索引便于管理。
Logstash接收Filebeat的输入
1 | sudo vim /etc/logstash/conf.d/test.conf |
1 | input { |
其中重要的是使用了 %{[fields][index]}
这个 filebeat
传过来的值做索引,区分了来源不同的日志文件。
效果展示
根据 tags
搜索不同项目的日志
自带的监控及展示
Todo
- 使用
Nginx
做请求转发 - 使用
Index Lifecycle Management
( ILM ) 策略管理索引的生命周期,减少磁盘空间使用,减少搜索规模 - 使用
Logstash
过滤出需要的信息,根据需求对数据做转换
Python日志规范
开发环境中:看到具体详细的日志信息来定位问题;生产环境,只需要异常、错误等级的日志信息。
输出日志的时机
- 系统启动参数、环境变量
- 异常捕获
- 函数获得期望之外的结果时
- 关键操作