Docker安装ELK

利用elk进行日志提取分析。

安装elasticsearch

创建一个内网组,方便其他组件之间直接通过内网访问,比如logstash和kibana等。

docker network create elk-net

启动Elasticsearch:

docker run -d --name elasticsearch --net elk-net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.12.0

注意:elasticsearch不支持lastest标签
-d:后台运行
--net:加入内网组
9200用于外部通讯,基于http协议,程序与es的通信使用9200端口。
9300jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9300端口进行通信。
discovery.type:使用单机模式
elasticsearch:7.12.0:镜像名加标签

启动后可以使用命令测试
curl http://localhost:9200/
出现如下结果表示安装成功

image.png

安装logstash

创建pipeline文件logstash.conf,放在c:\pipeline目录下,内容如下

input {
  file {
    path => "/tmp/logs/t-monitor-error.log"
    start_position => "beginning"
    type => monitor
  }
}

filter {
    grok {
      match => { "message" => "%{TIMESTAMP_ISO8601:time} \| %{GREEDYDATA:thread} \| %{LOGLEVEL:level} \| %{GREEDYDATA:class} \| %{GREEDYDATA:logstr}" }
    }
}

output {
  elasticsearch { hosts => ["elasticsearch:9200"] }
  stdout { codec => rubydebug }
}

path:需要读取的日志文件,为容器中的目录,可以挂载宿主机目录
type:自定义
grok:根据正则表达式对日志内容进行分段分词,定义参照Patern
output:输出到es和控制台,因为加入同一个network,所以可以直接用容器名访问。

日志文件t-monitor-error.log放到c:\logs目录下
启动:

docker run --rm -it --network elk-net -v /c/pipeline/:/usr/share/logstash/pipeline/ -v /c/logs/:/tmp/logs/ --name logstash logstash:7.12.0

rm:一次性启动,关闭时会删除容器,若想后台运行可改为-d
挂载目录:
/c/pipeline/:/usr/share/logstash/pipeline/
/c/logs/:/tmp/logs/

若启动出错,可能是由于挂载目录失败,docker destop需要进行如下配置,将C盘根目录加入Resources的FILE SHARING列表中。

image.png

启动成功后控制台会打印解析完成的信息
image.png

若出现中文乱码,说明log文件不是utf-8格式的
并且也可以直接使用API在es中查询
先用curl http://localhost:9200/_cat/indices?v找到index
image.png

然后查询index中的数据curl http://localhost:9200/logstash-2021.04.14-000001/_search
image.png

可以看到数据已经写入es了,程序可以使用REST API进行查询。

安装kibana

docker run -d --name kibana --network elk-net -p 5601:5601 kibana:7.12.0

打开kibana浏览器页面http://localhost:5601/
配置Index patterns为logstash*

image.png

配置完成后,就可以在discover中看到log信息,可以进行条件查询或者全文搜索。
image.png

你可能感兴趣的:(Docker安装ELK)