一、简介

ELK是Elasticsearch+Logstash+Kibana简称

  • Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在是使用最广的开源搜索引擎之一。
  • Logstash 简单来说就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端,与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供了很多功能强大的滤网以满足你的各种应用场景。
  • Kibana 是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图标、表格、地图等,kibana能够很轻易的展示高级数据分析与可视化。

二、编写docker-compose.yml文件

# 创建相关目录
mkdir -p /databases/elk
cd /databases/elk
mkdir -p elasticsearch/plugins
mkdir -p elasticsearch/data
mkdir -p logstash

# 创建并便捷docker-compose.yml文件、并将下面的内容粘贴进配置文件
vim docker-compose.yml
# 带注释的文本有时候粘贴进vim编辑会换行出错,此时在i插入之前设置粘贴输入,方式是:
#    先键盘输入英文冒号“:”,在输入 “set paste”,回车
#    在键盘输入“i”进入编辑,完成粘贴即可。
version: '3'
services:
  elasticsearch:
    image: elasticsearch:7.17.1  #镜像
    container_name: elk_elasticsearch  #定义容器名称
    restart: always  #开机启动,失败也会一直重启
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx8g" #设置使用jvm内存大小
    volumes:
      - /databases/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
      - /databases/elk/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
    ports:
      - 9200:9200
      - 9300:9300
  kibana:
    image: kibana:7.17.1
    container_name: elk_kibana
    restart: always
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址
      - I18N_LOCALE=zh-CN  #设置系统语言文中文
      # - SERVER_PUBLICBASEURL=https://kibana.cloud.com #如果事先已经准备好访问域名则这项可以先配置,或者启动完成后再修改也可以,修改完配置文件再执行以下docker-compose up 会自动更新
    ports:
      - 5601:5601
  logstash:
    image: logstash:7.17.1
    container_name: elk_logstash
    restart: always
    volumes:
      - /databases/elk/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    ports:
      - 4560:4560

补充文档:1、kibana docker完整文档

2、Install Elasticsearch with Dockeredit

三、修改相关配置

在上一步所在目录中执行

# 修改文件夹访问权限
chmod -R 777 elasticsearch
chmod -R 777 logstash

# 设置logstash配置文件
vim logstash/logstash-springboot.conf
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => "es:9200"
    index => "springboot-logstash-%{+YYYY.MM.dd}"
  }
}

四、安装并执行

由于网络原因国内一些服务器下载镜像超慢、有时可能会访问不到,这时推荐配置镜像加速,参考文章Docker 镜像加速

# 后台进程模式启动
docker-compose up -d
# 查看运行情况
docker-compose ps
运行状态
访问restfull接口、说明安装成功

访问kinbana,浏览器访问http://localhost:5601 (或ip地址、注意服务器防火墙端口要开启、出现如下图所示说明安装成功)

如上所示链接为英文界面、可以设置为中文,在docker-compose.yml文件中修改I18N_LOCALE值为zh-CN即可。

五、设置nginx反向代理

server {
    listen 443 ssl http2;
    server_name  kibana.cloud;
    index  index.html index.htm;

    ssl_certificate  /root/.acme.sh/kibana.cloud/fullchain.cer;
    ssl_certificate_key  /root/.acme.sh/kibana.cloud/kibana.cloud.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    
    access_log  /root/nginx-tools/logs/elk/access.log main;
    error_log  /root/nginx-tools/logs/elk/error.log;

    ## send request back to apache ##
    location / {
        proxy_pass http://127.0.0.1:5601; 
        auth_basic "Please Input Password";
        auth_basic_user_file /etc/nginx/conf.d/htpasswd/elk-htpasswd;
    }
    location ~ /\. {
       deny all;
    }
}

auth_basic为nginx密码登录认证配置,htpasswd设置密码参考文章htpasswd设置nginx账号密码访问

https证书生成参考文章利用acme.sh生成免费htts证书.

最后修改日期: 2022年3月5日

作者