每日一更 EFK日志分析系统

需要docker和docker-compose环境

下面时docker-compose.yaml文件

[root@node1 docker-EFK]# cat docker-compose.yaml 
version: '3.3'

services:

  elasticsearch:
    image: "docker.elastic.co/elasticsearch/elasticsearch:7.17.5"
    container_name: elasticsearch
    restart: always
    environment:
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    - "discovery.type=single-node"
    - "cluster.name=myes"
    - "node.name=jeven"
    # - xpack.security.enabled: "false"
    ulimits:
      memlock:
        soft: -1
        hard: -1 
    networks:
      myefk:
        ipv4_address: 172.29.120.10
        aliases:
        - es
        - jeven
    ports:
    - "9200:9200"
    - "9300:9300"
    volumes:
    - /home/docker-EFK/config/:/usr/share/elasticsearch/config
    - /home/docker-EFK/efk/es/data/:/usr/share/elasticsearch/data
  
  kibana:
    image: "docker.elastic.co/kibana/kibana:7.17.5"
    restart: always
    environment:
      ELASTICSEARCH_URL: http://10.23.3.2:9200
      ELASTICSEARCH_HOSTS: '["http:/10.23.3.2:9200"]'
      I18N_LOCALE: zh-CN
    networks:
      myefk:
        ipv4_address: 172.29.120.20
        aliases:
          - kibana
          - kib
    ports:
    - "5601:5601"
    links:
    - "elasticsearch"

  filebeat:
    image: "docker.elastic.co/beats/filebeat:7.17.5"
    restart: always
    networks:
      myefk:
        ipv4_address: 172.29.120.30
        aliases:
          - filebeat
          - fb
    user: root
    command: ["--strict.perms=false"]
    volumes:
    - /home/docker-EFK/efk/filebeat.yaml:/usr/share/filebeat/filebeat.yml
    - /var/lib/docker:/var/lib/docker:ro
    - /var/run/docker.sock:/var/run/docker.sock
    links:
    - "elasticsearch"
    - "kibana"
  
  elasticsearch-head:
    image: "tobias74/elasticsearch-head"
    container_name: elasticsearch-head
    restart: always
    networks:
      myefk:
        ipv4_address: 172.29.120.50
    ports:
    - "9100:9100"
    links:
    - "elasticsearch"

networks:
  myefk:
    driver: bridge
    ipam:
      config:
        - subnet: 172.29.120.0/24

使用docker-compose up -d执行

使用docker ps 看容器状态。

[root@node1 docker-EFK]# docker ps
CONTAINER ID   IMAGE                                                  COMMAND                  CREATED          STATUS                          PORTS                                                                                  NAMES
42581fc03590   tobias74/elasticsearch-head                            "/bin/sh -c 'grunt s…"   5 minutes ago    Up 5 minutes                    0.0.0.0:9100->9100/tcp, :::9100->9100/tcp                                              elasticsearch-head
ce1464dc2726   docker.elastic.co/beats/filebeat:7.17.5                "/usr/bin/tini -- /u…"   19 minutes ago   Up 19 minutes                                                                                                          docker-efk_filebeat_1
fc979274d0f1   docker.elastic.co/kibana/kibana:7.17.5                 "/bin/tini -- /usr/l…"   19 minutes ago   Up 19 minutes                   0.0.0.0:5601->5601/tcp, :::5601->5601/tcp                                              docker-efk_kibana_1
f5f94ba61d0b   docker.elastic.co/elasticsearch/elasticsearch:7.17.5   "/bin/tini -- /usr/l…"   19 minutes ago   Up 18 minutes                   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch

elasticsearch是日志存放的数据库,elasticsearch下的索引(Index)类似于关系型的一个数据库。文档(Document):Elasticsearch中的数据单位,可以理解为一条记录或一条消息。

elasticsearch-head就是一款能连接ElasticSearch搜索引擎,并提供可视化的操作页面对ElasticSearch搜索引擎进行各种设置和数据检索功能的管理插件。

ES相关术语

文档 Document

Document 文档就是用户存在 es 中的一些数据,它是 es 中存储的最小单元。(类似于表中的一行数据。)注意:每个文档都有一个唯一的 ID 表示,可以自行指定,如果不指定 es 会自动生成

索引 Index

索引其实是一堆文档 Document 的集合。(它类似数据库的中的一个表)

字段 Filed

在 ES 中,Document就是一个 Json Object,一个Json Object其实是由多个字段组成的,每个字段它有不同的数据类型。

ES术语总结

ES索引、文档、字段关系小结:
一个索引里面存储了很多的 Document 文档,一个文档就是一个json object,一个json object是由多个不同或相同的 filed 字段组成;

操作原理
ES的操作和我们传统的数据库操作不太一样,它是通过 RestfulAPI 方式进行对ES进行操作,其实本质上就是通过 http的方式去变更我们的资源状态。   
通过 URI 的方式指定要操作的资源,比如 Index、Document等。   
通过 Http Method 指明资源操作方法,如GET、POST、PUT、DELETE 等。

访问elasticsearch两种方式
  • curl命令本地访问
  • 安装kibana访问

kibana是一个

分析和可视化数据。搜索隐藏的见解,编制图表仪表板,仪表、地图和其他可视化显示您发现的内容,并与他人分享。
搜索、观察和保护你的数据。向你的应用或网站添加搜索框,分析日志,指标,并发现安全漏洞。
管理、监控和保护 Elastic Stack。管理您的索引和摄入管道,监控 Elastic Stack 集群的运行状况,并控制哪些用户可以访问哪些特征和数据。

kibana对es的增删改查,

kibana操作elasticsearch的索引
创建索引
#创建索引
PUT /cry_index

查看索引

#查看全部索引名 
GET _cat/indices

#查看指定索引 GET  索引名
GET filebeat-2024.06.29

PUT /ly_index 创建索引                {
                                      "acknowledged" : true,
                                      "shards_acknowledged" : true,
                                      "index" : "ly_index"
                                      }
GET /ly_index   查看索引


{
  "ly_index" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "ly_index",
        "creation_date" : "1720143452731",
        "number_of_replicas" : "1",
        "uuid" : "FRaCW3lgSny9e11v8WSUmw",
        "version" : {
          "created" : "7170599"
        }
      }
    }
  }
}
DELETE /ly_index     删除索引


{
  "acknowledged" : true
}

kibana操作elasticsearch的文档

PUT /ly_index_01       创建索引

POST /ly_index_01/_doc/1          创建索引下的文档
{
  "username": "oldxu",
  "age": 18,
  "salary": 1000000
}

_doc为文档名

oldxu_index为索引名  ,没有将会自动创建

1 为文档id  如果不指定会随机创建

指定id的,

POST /oldxu_index/_doc/1
{
  "username": "oldqiang",
  "age": 30,
  "salary": 300
}
结果:
{
  "_index" : "oldxu_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
。。。。。。。

不指定id的

POST /oldxu_index/_doc
{
  "username": "oldqiang",
  "age": 30,
  "salary": 300
}
结果
{
  "_index" : "oldxu_index",
  "_type" : "_doc",
  "_id" : "wtKTgJAB9dAZABV53ccy",
  "_version" : 1,

查询文档

查询文档时,需要指定要查询的文档id,不指定无法查找

GET /oldxu_index/_doc/1

GET /oldxu_index/_doc/1
结果
{
  "_index" : "oldxu_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "username" : "oldqiang",
    "age" : 30,
    "salary" : 300
  }
}

不指定id,无法查找

GET /oldxu_index/_doc

结果
{
  "error" : "Incorrect HTTP method for uri [/oldxu_index/_doc?pretty=true] and method [GET], allowed: [POST]",
  "status" : 405
}

查询,搜索所有文档,用_search

GET /oldxu_index/_search

filebeat的使用技巧

1.filebeat的安装,可以使用二进制,也可以使用rpm等。

我使用了tar包,

filebeat这里就是一个测试源,可以关闭,对es没有影响,后期需要安装到收集日志的服务器上。

我下载了filebeat-8.11.1-linux-x86_64.tar.gz

tar -zxvf filebeat-8.11.1-linux-x86_64.tar.gz、

mv filebeat-8.11.1-linux-x86_64 .filebeat

cd ./filebeat

vi filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/secure
  encoding: utf-8
  fields:
    type: "secure"
  fields_under_root: true
output.elasticsearch:
  hosts: ["10.23.3.2:9200"]
  indices:
    - index: "secure-%{+yyyy.MM.dd}"
      when.contains:
        type: "secure"

./filebeat -e -c filebeat.yml 启动

后台启动nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 & disown

使用技巧:

1.使用kibana把索引删除了,想要重新再把filebeat客户端的日志上传,可以删除..../filebeat/data/registry/filebeat/log.json文件。注意千万不要删除meta.json,删除后重新启动filebeat会报错。

问题1:

创建elasticsearch 是初期没有挂在config文件夹,后期则无法更改elasticsearch.yaml文件,但是再docker-compose.yaml中加入- /home/docker-EFK/config/:/usr/share/elasticsearch/config  后elasticsearch启动一直报错,起不来。查看logs 发现无法打开/usr/share/elasticsearch/config下的文件。解决的方法是,先不映射/usr/share/elasticsearch/config,启动后docker cp 容器id:/usr/share/elasticsearch/config  (宿主机目录)/home/docker-EFK/config/ 。把容器的这个目录拷贝到宿主机,然后再在yaml中加入- /home/docker-EFK/config/:/usr/share/elasticsearch/config。这样就可以了。

例如

[root@bogon EFK]# docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
docker.elastic.co/elasticsearch/elasticsearch   7.17.5              11df7a62573d        2 years ago         610 MB

我们创建一个容器

 docker run -tid --name es.test docker.elastic.co/elasticsearch/elasticsearch:7.17.5

 docker cp es.test:/usr/share/elasticsearch/config /datax/EFK/

问题2:elasticsearch-head 启动成功后,浏览器http://10.23.3.2:9100可以正常访问,但是连不上elasticsearch,后查了一下,需要在elasticsearch.yaml添加两行内容

http.cors.enabled: true

http.cors.allow-origin: "*"

[root@node1 config]# cat elasticsearch.yml 
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true   
http.cors.allow-origin: "*"

重启容器 docker restart es的容器id,重启后,连接成功。

kibana使用技巧

1.

菜单下  stack management  进入后 点击 索引管理,既可以看到所有的索引了,es的索引就相当于数据库表名,我们使用filebeat发送日志时,每个配置文件都定义了索引名,filebeat.yml部分内容如下

output.elasticsearch:
  hosts: ["10.23.3.2:9200"]
  indices:
    - index: "secure1-%{+yyyy.MM.dd}"
      when.contains:
        type: "secure"

 - index: "secure1-%{+yyyy.MM.dd}"  就是定义索引名称,我们可以将多个filebeat客户端定义形同的索引名。这样所有客户端的数据都存入一个索引中,也可以使用不同的索引名,再使用不同索引名时,kibana需要创建一个索引模板,将相同特征的索引集中到一起,便于检索。

点击创建索引,名称使用一类索引共有的字符+*号,创建索引模式成功后,discover中检索

检索:

点击菜单discover --添加筛选---选择sec*  -此时检索的信息。同时可以使用 搜索功能。如messsage : “Failed”  检索messages字段中含有failed的信息进行显示。

也可以点击右侧

默认显示全部信息,也可以点击右侧+号选择显示字段。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值