docker-compose部署elk环境

尝试一下使用docker部署elk环境,感觉很方便,记录一下使用docker-composea编排部署的方式

创建compose文件目录mkdir /opt/server/elk

docker-compose文件如下

version: '2'

services:

 elasticsearch:
   image: elasticsearch:6.4.2 #使用的是elk的官方镜像
   container_name: elasticsearch

   ports:
     - "9200:9200"   # REST API端口
     - "9300:9300"   # RPC端口
   volumes:  #挂载elasticsearch配置文件目录,容器中的配置文件位置都是固定的,可以到官方文档查看
     - ./elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
   environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
   networks:
     - elk

 logstash:
   image: logstash:6.4.2
   container_name: logstash
   command: logstash -f /etc/logstash/conf.d/logstash.conf
   volumes:
     - ./logstash/conf.d:/etc/logstash/conf.d
     - /var/log/nginx:/var/log/nginx
   #收集本地的nginx日志作为展示,nginx服务也是本地的一个容器,将其日志位置映射到logstash容器中

   ports:
     - "5000:5000"
   networks:
     - elk

 kibana:
   image: kibana:6.4.2
   container_name: kibana
   environment: #在kibana中指定es地址,使用容器名称进行连接
     - ELASTICSEARCH_URL=http://elasticsearch:9200
   ports:
     - "5601:5601"
   networks:
     - elk

networks:
  elk:
    driver: bridge

在/opt/server/elk目录下创建对应容器的目录和其配置文件,用作挂载,整个目录结构如下:

[root@tccp ~]# cd /opt/server/elk/
[root@tccp elk]# tree ./
./
├── docker-compose.yml
├── elasticsearch
│   └── elasticsearch.yml
├── kibana
└── logstash
    └── conf.d
        ├── logstash.conf

elasticsearch.yml文件内容如下:

---

cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
discovery.type: single-node

logstash.conf文件内容如下:

input {

       file {

               start_position => "beginning"
               path => ["/var/log/nginx/access.log"]

       }
# 以上file段配置是针对logstash作为agent端收集日志的场景使用,从本地文件输入
#下面的注释内容可以忽略,是采用redis作为缓存服务架构方式,这里用不到
#        redis {
#        host => "192.168.2.142"
#         port => "6379"
#         key => "filebeat"    #这里的key要与filebeat.yml中定义的key相同
#         data_type => "list"
#         threads => "5"
#         db => "0"
#    }

}

filter {

        date {
        match => [ "timestamp","dd/MMM/YYYY:H:m:s Z" ]
        remove_field => "timestamp"
        }


}

output {
                elasticsearch {       #输出到elasticsearch服务器,先输出到本地终端查看,没有问题后输出到elasticsearch
                    hosts => "elasticsearch:9200"  #这里使用elasticsearch容器名称的方式连接到ES
                    index => "logstash-%{+YYYY.MM.dd}"
                    document_type => "nginx_logs"
                }

#               stdout {            #输出到屏幕测试
#                    codec => rubydebug
#                }
            }


上面的内容写好后,执行部署指令即可启动elk容器,启动前先运行nginx服务,可以使用本地安装或者仍然运行在容器中,这里nginx服务启动方式略过。

所有容器都启动后,nginx容器中的日志映射在宿主机上又被挂载到了logstash容器中,通过文件的方式输入到logstash中。

测试请求,生成一些日志

while true; do ip=$[$RANDOM%223+1]; curl --header "X-Forwarded-For: $ip.33.22.100" http://192.168.2.230/1.html;done

访问kibana ip:5601

《docker-compose部署elk环境》

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注