Index / ElasticSearch

Elasticsearch, Kibana, Logstash, Filebeat 实现日志的自动采集、搜索和分析

原文:https://ichochy.com/posts/elasticsearch/20210418.html

Elastic Stack 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎

Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化管理和展示

Logstash 是一个免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中

Beats 是一个免费且开放的平台,集合了多种单一用途数据采集器,将数据发送给 Logstash 或 Elasticsearch

Beats 系列

全品类采集器,搞定所有数据类型,如下:

  1. Filebeat:日志文件
  2. Metricbeat:指标
  3. Packetbeat:网络数据
  4. Winlogbeat:Windows 事件日志
  5. Auditbeat:审计数据
  6. Heartbeat:运行时间监控
  7. Functionbeat:无需服务器的采集器

一、下载镱像(image)

Docker映像和标签的列表:https://www.docker.elastic.co 搜索镱像(image)

docker search elasticsearch
docker search kibana 
docker search logstash 

获取镱像(image)

docker pull elasticsearch:7.6.0     #镜像名称:Tag
docker pull kibana:7.6.0            #镜像名称:Tag
docker pull logstash:7.6.0            #镜像名称:Tag
docker pull docker.elastic.co/beats/filebeat:7.6.0            #镜像名称:Tag

注:版本要统一

二、创建 ELK.yml

ELK.yml

version: "3.5"

services:
  elasticsearch:
     container_name: elasticsearch
     image: elasticsearch:7.6.0             #镱像(image)
     restart: always                        #重启方式
     environment:
       discovery.type: single-node          #环境变量:运行模式 单例
     ports:
       - "9200:9200"                        #端口映射
       - "9300:9300"
  kibana:
    container_name: kibana
    image: kibana:7.6.0                     #镱像(image)
    restart: always                         #重启方式
    environment:
      I18N_LOCALE: "zh-CN"                  #指定中文
    ports:
       - "5601:5601"                        #端口映射
  logstash:
    container_name: logstash
    image: logstash:7.6.0
    restart: always
    ports: 
      - "5044:5044"
      - "9600:9600"
  filebeat:
    container_name: filebeat
    image: filebeat:7.6.0
    restart: always
    command: filebeat -e -strict.perms=false    #禁用严格权限检查
    volumes:                                    #文件夹映射,本地:容器
        - "/Users/ichochy/beats/filebeat.yml:/usr/share/filebeat/filebeat.yml"

注:

  1. 注意YML文件编写,不要出现 Tab 制表符,否则导致文件解析错误,启动容器(container)失败
  2. 读取文件权限问题是软件自身的权限验证,可使用--strict.perms=false,禁用严格权限验证
# 错误信息
yaml.scanner.ScannerError: mapping values are not allowed here
# 错误息信
Exiting: error loading config file: config file ("{beatname}.yml") can only be
writable by the owner but the permissions are "-rw-rw-r--" (to fix the
permissions use: 'chmod go-w /etc/{beatname}/{beatname}.yml')

三、运行容器

宿主机hosts中添加

127.0.0.1      elasticsearch

命令启动

docker-compose -f ELK.yml up -d
docker-compose 
                -f  #指定构建文件
                up  #创建并启动容器
                -d  #后台运行容器(container),打印容器(container)ID

四、检查容器的运行状态

elasticsearch 访问:http://127.0.0.1:9200
15943942032407731

logstash 访问:http://127.0.0.1:9600
15943942392245702

Kibana 访问:http://127.0.0.1:5601,进入 Kibana
15731085378080282

运行docker ps查询容器运行状态,可以查看到容器的ID

mleo$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
4d53b3ab9772        filebeat:7.6.0        "/usr/local/bin/dock…"   2 days ago          Up 8 minutes  
1b8cb2effede        logstash:7.6.0        "/usr/local/bin/dock…"   2 hours ago         Up About an hour    0.0.0.0:5044->5044/tcp, 0.0.0.0:9600->9600/tcp   logstash
69b8bc678e4e        kibana:7.6.0          "/usr/local/bin/dumb…"   3 weeks ago         Up 2 hours          0.0.0.0:5601->5601/tcp                           kibana
8c655f5b7493        elasticsearch:7.6.0   "/usr/local/bin/dock…"   3 weeks ago         Up 2 hours          0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch

运行docker logs id查看容器运行日志

例:持续查看`filebeat`日志
docker logs 4d53b3ab9772 -f

五、修改 filebeats 配置

filebeat.inputs:
 - type: log
   paths:
     - /usr/share/filebeat/logs/file/*.log

#output.elasticsearch:
#  hosts: ["http://elasticsearch:9200"]
#  index: "ichochy"

output.logstash:
  hosts: ["logstash"]

:容器中,服务间访问可以通过服务名直接访问(协议+服务名+端口),如:http://logstash:5044

六、修改 logstash 配置

input {
  beats {
    port => 5044
  }
}

output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]  #elasticsearch请求地址
    index => "ichochy"                      #索引名称
  }
}

七、模拟采集日志

filebeat的监控的文件路径下动态添加日志文件,日志就可以自动采集发送到logstash,过虑处理后发送到elasticsearch

运行docker exec -it 4d53b3ab9772 bash进入filebeat,在logs文件夹添加web.log文件

touch web.log   #创建日志文件
echo "https://ichochy.com" > web.log  #添加日志信息

查看logstash日志信息可以看到打印的日志,监控来自filebeat发来的信息

{
           "ecs" => {
        "version" => "1.4.0"
    },
    "@timestamp" => 2021-04-18T02:26:42.851Z,
       "message" => "https://ichochy.com",
          "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
         "input" => {
        "type" => "log"
    },
      "@version" => "1",
         "agent" => {
        "ephemeral_id" => "cf2ff9ee-294a-4ac9-9ee7-3da65a3c5beb",
            "hostname" => "4d53b3ab9772",
                  "id" => "897d2be6-5aa2-4a5d-a824-a440a4d19d73",
             "version" => "7.6.0",
                "type" => "filebeat"
    },
          "host" => {
        "name" => "4d53b3ab9772"
    },
           "log" => {
          "file" => {
            "path" => "/usr/share/filebeat/logs/file/web.log"
        },
        "offset" => 0
    }
}
例:持续查看`logstash`日志
docker logs 1b8cb2effede -f

八、管理、搜索、分析日志

访问:http://127.0.0.1:5601,进入 Kibana

在设置管理(management)中创建索引: WX20210418-103626

Discover可以看到刚刚添加进来的日志数据,开始你的表演…………

15943959651825033

引用