ELK|使用Docker构建ELK日志分析系统


ELK是Elasticsearch,Logstash,Kinaba三者的合称.
Elasticsearch是一个基于Lucene的搜索服务器。 它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。 Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
Logstash是开源的服务器端数据处理管道,能够同时从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的“存储库” 中。 Logstash对数据处理主要分为3个步骤:输入,过滤,输出。 每个模块都是以插件的形式进行扩展,目前支持的插件种类多达200多种。
Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。
Logstash收集日志传输到Elasticsearch,Kibana直接从Elasticsearch查询日志并展示.这种结构是最简单的组合,对于日志量比较小的站点来说比较实用,今天我们就通过docker运行当前最新版本的7.6.0版本.
版本

elasticsearch:7.6.0
logstash:7.6.0
kibana:7.6.0

配置网络

docker network create elk

elasticsearch

INNER_IP=`ifconfig eth0|awk -F' ' 'NR==2{print $2}'`
docker run -d \
--name elasticsearch \
--net elk \
-p $INNER_IP:9200:9200 \
-p $INNER_IP:9300:9300 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /opt/elasticsearch/config:/usr/share/elasticsearch/config \
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/elasticsearch/logs:/usr/share/elasticsearch/logs \
-e "discovery.type=single-node" \
elasticsearch:7.6.0

注意:将es的配置目录和数据库挂载到了主机上,这样的话,当前的docker删除掉数据也不会丢.
确认成功:

curl 192.168.199.108:9200
{
  "name" : "14921bba792b",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "rb8nhOMWTuy6_dx1te7png",
  "version" : {
    "number" : "7.6.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
    "build_date" : "2020-02-06T00:09:00.449973Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

kibana

INNER_IP=`ifconfig eth0|awk -F' ' 'NR==2{print $2}'`
docker run -d \
--name kibana \
--net elk \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-p $INNER_IP:5601:5601 \
kibana:7.6.0

这一步执行完,不出意外的话,直接访问

http://INNER_IP:5601

就可以正常查看了,不过还没有数据,我们需要采集一些nginx日志进来.

logstash
配置文件logstash.conf

input {
    file {
        path => "/logs/wwwlogs/*.log"
        start_position => "beginning"
    }
}

filter {
    json {
        source => "message"
    }
    mutate {
        convert =>[
            "request_time","float",
            "body_bytes_sent","integer",
            "upstream_response_time","float",
            "status","integer"
        ]
    }
}
output {
    elasticsearch {
        hosts=>["192.168.199.108:9200"]
        index => "nginx-%{index_day}"
        document_type => "nginx-access"
    }
}

运行

docker run -dt \
--restart=always \
--name=logstash \
-v $PWD/logstash.conf:/usr/share/logstash/config/logstash.conf \
-v $PWD/logs:/logs \
-w /usr/share/logstash/config/ \
logstash:7.6.0 logstash -f logstash.conf

kinaba配置

依次找到Managent->Index Patterns->Create index pattern

输入nginx *->Next step

选择时间索引

左侧第一个Discover
看到数据已经进来了.


相关博文

About rainbird

IOS攻城狮
This entry was posted in ELK and tagged , , , , , , . Bookmark the permalink.

发表评论