docker 搭建 ELK

Posted 福州-司马懿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 搭建 ELK相关的知识,希望对你有一定的参考价值。

简介

ELK开源日志框架同数据 https://www.elastic.co

  • Elasticsearch 是一个基于JSON的分布式搜索和分析引擎
  • Logstash 是动态数据搜集管道,拥有可扩展的插件生态系统
  • Kibana 可以让您的数据变得有形有样,是一个可扩展的用户界面

官网docker指导地址

ELK搭建

下载镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.13.4
docker pull docker.elastic.co/kibana/kibana:7.13.4
docker pull docker.elastic.co/logstash/logstash:7.13.4

Elasticsearch + Kibana

创建网络 docker network create elastic

查看已有网络 docker network ls
若后续要删除网络,使用docker network rm <网络名>

新建配置文件 /root/elk/elasticsearch/elasticsearch.yml

cluster.name: "docker-cluster"
network.host: 0.0.0.0
action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*

启动Elasticsearch docker run --name es01-test --net elastic -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" -e "discovery.type=single-node" -v /root/elk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml docker.elastic.co/elasticsearch/elasticsearch:7.13.4

ES启动成功后,输入<ip>:9200 应该要能看到类似下面的输出

启动Kibana docker run --name kib01-test --net elastic -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es01-test:9200" docker.elastic.co/kibana/kibana:7.13.4

问题1:ES启动失败

ES启动不久后自动退出,无任何报错

容器虚拟内存空间给小了,至少需要262144

vim /etc/sysctl.conf
//在最后一行上加上
vm.max_map_count=262144

执行 sysctl -p 可以查看是否配置成功。如果还是没成功,则检查启动命令是否含有ES_JAVA_OPTS参数来设置Xms和Xmx

问题2:

ES启动成功,但访问Kibana时,报500错误

可以使用docker exec -it es01-test bash进入容器中。配置文件路径为 /usr/share/elasticsearch/config/elasticsearch.yml

修改配置文件,在末尾加上 action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*

由于容器中一般没装vi编辑器,因此可以使用echo命令进行追加,例如 echo "action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*" >> config/elasticsearch.yml

这是为elasticsearch增加自动创建索引功能(这里的索引,就是 Logstash 配置文件 input 里面的 type)
也可以在外部编写配置文件,之后挂载至容器中

修改完后,先重启elasticsearch(docker restart es01-test),再重启kibana(docker restart kib01-test

此时启动,docker不会在前台,而会转为在后台运行容器。因此,如果需要查看容器日志,可以使用 docker logs <容器名>docker logs <容器ID>

Logstash

Logstash主要作用是收集日志,这个组件有很多插件,可以支持大部分日志集成方式,如tcp、udp、jdbc、文件、队列等

启动方式

首先,创建 /root/logstash/logstash.yml 文件,输入如下内容

path.config: /usr/share/logstash/conf.d/logstash.conf
path.logs: /var/log/logstash

然后,创建 /root/logstash/conf.d/logstash.conf 文件,输入如下内容

input {
  std {}
  file {
    path => "/tmp/log/syslog"
    type => "log"
    start_position => "beginning"
  }
}
output {
  elasticsearch {
    hosts => ["http://es01-test:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
  }
  stdout {codec => rubydebug}
}

使用 ls -lt /var/log 命令,可以将系统日志,按修改时间排序,并列出详细信息。我们先使用系统日志作为输入
使用docker启动logstash镜像

docker run --name logstash01-test -it --rm -p 5044:5044 --net elastic -v /var/log/secure:/tmp/log/syslog -v /root/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /root/elk/logstash/conf.d/:/usr/share/logstash/conf.d/ docker.io/logstash:7.13.4

使用如下命令进入容器内部,可以查看配置文件的范例

docker exec -it logstash01-test bash
cat /usr/share/logstash/config/logstash-sample.conf

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

查看Elastic网页

访问地址 http://<ip>:5601/app/home#/,5601是创建elasticsearch容器时的端口号
单击左侧“三杠”,展开左侧面板

  • 创建索引 Management —> Stack Management —> Kibana —> Index Patterns
  • 查看日志 Analytics —> Discover



使用Log4j将日志送到ELK

import org.apache.log4j.Logger;
public class ElkLog4jDemo {
  private static final Logger logger = Logger.getLogger(ElkLog4jDemo.class);
  public static void main(String[] args) throws Exception {
    logger.debug("使用Log4j发送日志给ELK")
  }
}

以上是关于docker 搭建 ELK的主要内容,如果未能解决你的问题,请参考以下文章

docker搭建elk

docker 搭建 ELK

实战本机用docker搭建elk环境并接入frostmourne,实现监控报警效果

利用ELK搭建Docker容器化应用日志中心

利用 ELK 搭建 Docker 容器化应用日志中心

基于docker搭建单机测试ELK