Docker安装Elasticsearch+kibana+filebeat(7.3.1)

关于elk这方面的介绍我这边就不多说了,之前有过介绍。我这篇文章为了应对目前我们这个公司业务量不大情况而搭建的日志收集系统。

一、安装Elasticsearch

官网链接https://www.elastic.co

安装docker我这里及不说了

从官网拉取elasticsearch镜像

[root@devon ~]# docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.1

[root@devon ~]# docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.3.1 <!--启动-->

二、安装kibana

拉取kibana镜像

[root@devon ~]# docker pull docker.elastic.co/kibana/kibana:7.3.1

启动

[root@devon ~]# docker run --name kibana -d -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://192.168.10.8:9200 kibana:7.3.1 <!--IP换成自己的-->

[root@devon ~]# docker run --name kibana -d -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://192.168.10.8:9200 kibana:7.3.1
0e07e9d646fe3e0786e434d2b97a813dac9c17cbd2ea664e0e5151dc4c4d4417
[root@devon ~]# docker ps -a

CONTAINER ID        IMAGE                                                 COMMAND                  CREATED             STATUS            
0e07e9d646fe        kibana:7.3.1                                          "/usr/local/bin/du..."   8 seconds ago       Up 7 seconds      
400f07c09c01        docker.elastic.co/elasticsearch/elasticsearch:7.3.1   "/usr/local/bin/do..."   6 hours ago         Up 6 hours

访问kibana IP+5601
Docker安装Elasticsearch+kibana+filebeat(7.3.1)

下面我们就利用filebeat收集日志吧

[root@devon ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz

[root@devon ~]# tar -zxf filebeat-6.2.4-linux-x86_64.tar.gz -C /data/

[root@devon ~]# mv /data/filebeat-6.2.4-linux-x86_64/ /data/filebeat-6.2.4

[root@devon ~]# vim /data/filebeat-6.2.4/filebeat.yml

怎么利用filebeat设置多个索引,方便查询日志呢,我选择自定义的filebeat.yml文件

下面是我简单的收集的三个Java服务的日志。也可以更改默认模板,如果安装了logstash,格式需要修改,分析日志的格式一般由开发定。他们若有特殊要求格式,就另有他们便也json格式文件或者其他格式。

filebeat.prospectors:
- input_type: log
  paths:
    - /var/application/ivy-user-service/logs/catalina.out
  fields:
    type: "user"
- input_type: log
  paths:
    - /var/application/ivy-sbd-service/logs/catalina.out
  fields:
    type: "sbd"
- input_type: log
  paths:
    - /var/application/ivy-order-service/logs/catalina.out
  fields:
    type: "order"
  json.message_key: log
  json.keys_under_root: true
output.elasticsearch:
  hosts: ["192.168.20.10:9200"]
  #index: "logs-%{[beat.version]}-%{+yyyy.MM.dd}"
  indices:
    - index: "user-service-log"
      when.equals:
        fields.type: "user"
    - index: "sbd-service-log"
      when.equals:
        fields.type: "sbd"
    - index: "order-service-log"
      when.equals:
        fields.type: "order"

然后如果我们有利用elasticsearch-head插件来管理集群的话我们可以看到
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
elasticsearch-head默认9100端口,为了避免端口发生冲突我就更改了下。如果线上的话,也没必要用这个管理。看自己的需求吧。

利用kibana和elasticsearch索引关联
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
其上面的图是我6.8.2版本的kinbana,到现在的7.3.1几乎没有差别

下面我们就来创建可视化图形吧。
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
7.3.1版本创建图表发生一点变化。
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
可以根据自己的需求来创建不同样式的图表,这里我就先创建line图表
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
点击你想创建的索引

Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
Docker安装Elasticsearch+kibana+filebeat(7.3.1)
至于kibana其他功能就自己探讨喽,

如果这样的架构满足不了也可以换成elk+kafaka+zookeeper等等

如果是集群模式的可以介绍两个管理集群的插件。

cerebo是kopf在es5上的替代者,通过web界面来管理和监控elasticsearch集群状态信息

bigdesk 统计分析和图表化elasticsearch集群状态信息

ES数据定期删除

如果不删除ES数据,将会导致ES存储的数据越来越多,磁盘满了之后将无法写入新的数据。这时可以使用脚本定时删除过期数据。

#/bin/bash
#es-index-clear
#只保留7天内的日志索引
LAST_DATA=`date -d "-7 days" "+%Y.%m.%d"`
#删除上个月份所有的索引
curl -XDELETE 'http://ip:port/*-'${LAST_DATA}'*'

可以视个人情况调整保留的天数,这里的ip和port同样设置为不存储数据的那台机器。该脚本只需要在ES中一台机器定时运行即可。然后再调用crontab
crontab -e添加定时任务:

0 1 * * * /root/cron/del_es.sh

每天的凌晨一点清除索引。

也可以把es-index-clear.sh内容换成其它优秀代码,如下:

#!/bin/bash

###################################
#删除早于十天的ES集群的索引
###################################
function delete_indices() {
    comp_date=`date -d "10 day ago" +"%Y-%m-%d"`
    date1="$1 00:00:00"
    date2="$comp_date 00:00:00"

    t1=`date -d "$date1" +%s` 
    t2=`date -d "$date2" +%s` 

    if [ $t1 -le $t2 ]; then
        echo "$1时间早于$comp_date,进行索引删除"
        #转换一下格式,将类似2017-10-01格式转化为2017.10.01
        format_date=`echo $1| sed 's/-/\./g'`
        curl -XDELETE http://127.0.0.1:9200/*$format_date
    fi
}

curl -XGET http://127.0.0.1:9200/_cat/indices | awk -F" " '{print $3}' | awk -F"-" '{print $NF}' | egrep "[0-9]*\.[0-9]*\.[0-9]*" | sort | uniq  | sed 's/\./-/g' | while read LINE
do
    #调用索引删除函数
    delete_indices $LINE
done

下面这两个脚本是在网上借鉴的,欢迎大家一起学习研究。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章