日志分析平台的开端

日志系统的诞生

在日常的运维和开发过程中,会有大量的日志,如果我们以传统的方式使用命令或者下载日志文件下来打开查看的话,工作量会大大增加,效率也会大打折扣,因此一个日志系统的出现就很有必要了。

TOC

日志系统架构了解

一个日志系统通常会有收集日志、存储日志、展示日志的功能,因此我们常用的日志系统往往是多个服务组成的一系列平台简称日志系统平台。
我们经常自己搭建使用的架构就有ELKEFK,两者之间的区别就在于收集日志的插件选择。

ELK和EFK解剖解析

这两个系统的日志存储和日志的展示都是相同的,存储使用的是Elasticsearch数据库,展示都是使用的Kibana。
各组件的作用

  • Logstash:从各种文件中收集日志数据,将日志格式化,对数据加工,并切推送到目标地址上。
  • Filebeat:从各种文件中收集日志数据,并数据进行压缩和归档,将数据传输到目标地址上。
  • Elasticsearch:对收集到的数据进行索引分类,并存储起来。
  • Kibana:对数据以方便的方式进行展示,并且可以根据习惯设置展示方式以及字段调整构建视图。

ELK和EFK比较

其实两个日志系统架构的比较来说就是LogstashFilebeat两个组件的比较。
性能和资源消耗
Filebeat相比Logstash来说比较轻量型,更加高性能,Filebeat的资源占用几乎可以忽略不计。而Logstash的资源占用就会很大。
功能特性
Filebeat功能比较简单,更专注于日志收集和传输。Logstash的功能则比较丰富,更加灵活和强大,支持更多的输入、输出、过滤功能。

老牌日志收集Logstash

Logstash主要功能可以分为三个部分:收集—>过滤—>输出(如下图所示)
logstash.001
Logstash输入会生成事件,然后对其再进行过滤修改,再将格式化的数据输出到对应的地方。

Logstash部署和简单使用

Logstash下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-7.17.16-linux-x86_64.tar.gz
1.下载并解压安装logstach

curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.17.16-linux-x86_64.tar.gz
tar zxf logstash-7.17.16-linux-x86_64.tar.gz
mv logstash-7.17.16 /usr/local/logstash

2.修改logstach配置文件

vim /usr/local/logstash/conf/logstash.conf
------------------------------------------
input {
   file{
     path => "/var/log/nginx/access.log"
     type => "access"
     start_position => "beginning"
   }
   file{
     path => "/var/log/nginx/error.log"
     type => "error"
     start_position => "beginning"
   }
}
output {
   if [type] == "access" {
   elasticsearch {
      hosts => ["192.168.31.101:9200"]
      index => "nginx_access-%{+YYYY.MM.dd}"
     }
    }
   if [type] == "error" {
   elasticsearch {
      hosts => ["192.168.31.102:9200"]
      index => "nginx_error-%{+YYYY.MM.dd}"
    }
  }
}

3.启动logstach服务

nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/logstash.conf &

配置logstash的服务加入到systemctl进行管理

cat > /usr/lib/systemd/system/logstash.service << EOF
[Unit]
Description=Logstash
Wants=network.target
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/logstash.conf
Restart=always
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target
EOF

重新加载systemctl服务并启动服务

systemctl daemon-reload
systemctl start filebeat --now

新秀选手Filebeat

Filebeat的来历

因为Logstash是由作者个人用JAVA语言写的工具,所以是在JVM虚拟机上运行的,资源消耗比较大,后来作者又用Golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。作者加入http://elastic.co公司以后,因为ES公司本身还收购了另一个开源项目Packetbeat,而这个项目专门就是用Golang的,有整个团队,所以ES公司干脆把logstash-forwarder的开发工作也合并到同一个Golang团队来搞,于是新的项目就叫Filebeat了。

Filebeat的具体了解

首先Filebeat是Beats中的一员。Beats是一种轻量级的日志收集器,在Beats家族中包括了6个成员。在早期的ELK日志系统中,无论是CPU、内存还有IO的资源消耗都是比较高,而Beats的资源消耗很低,几乎忽略不计。
Beats的6个成员:

  • Packetbeat:收集网络流量数据
  • Metricbeat:收集系统、进程和文件系统级别的CPU和内存使用情况等数据
  • Filebeat:收集日志文件数据
  • Winlogbeat:收集Windows事件日志数据
  • Auditbeat:收集审计日志
  • Heartbeat:收集系统运行时的数据
    Filebeat的工作流程
    以下是Filebeat的工作流程,Filebeat运行之后会不断监视并在指定的日志数据的存放位置查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。
    filebeat.001
    Filebeat可以拥有更多的推送目标,其中就有Redis、Kafka、Elasticsearch、Logstash等,可以很好地做到日志系统的架构优化和结合其他工具进行调整。

Filebeat部署和简单使用

Filebeat下载地址:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.16-linux-x86_64.tar.gz
1.下载并解压安装filebeat

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.16-linux-x86_64.tar.gz
tar zxf filebeat-7.17.16-linux-x86_64.tar.gz
mv filebeat-7.17.16-linux-x86_64 /usr/local/filebeat

3.编写filebeat配置文件

vim /usr/local/filebeat/filebeat.yml
------------------------------------------
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/logs/access.log

output.elasticsearch:
  hosts: ["localhost:9200"]
  protocol: "http"
  username: "elastic"
  password: "elastic123456"

processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded

3.启动filebeat服务

nohup /usr/local/filebeat/filebeat -e -c /usr/local/filebeat/filebeat-test.yml &

4.配置filebeat的服务加入到systemctl进行管理

cat > /usr/lib/systemd/system/filebeat.service << EOF
[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml
Restart=always

[Install]
WantedBy=multi-user.target
EOF

重新加载systemctl服务并启动服务

systemctl daemon-reload
systemctl start filebeat --now

应用总结

Filebeat能够更加高效整洁地进行日志数据的收集,适合比较简单需求的场景。而Logstash提供了更强大的数据处理能力,所以如果需要复杂多样的日志数据收集并且调整格式可以选择Logstash。当然我们也可以结合使用,这在平常的需求中也常常是这样做的,可以选择Filebeat负责数据收集,Logstash负责数据处理,构建更加完整的数据处理和分析管道。