使用Docker搭建ELK日志管理平台

为何要使用ELK呢?公司产品、项目贼多,部署到不一样的服务器上,当系统出现故障时,工程师须要登陆到各个服务器上,使用 grep / sed / awk 等 Linux 脚本工具去日志里查找故障缘由。在没有日志系统的状况下,首先须要定位处理请求的服务器,若是这台服务器部署了多个实例,则须要去每一个应用实例的日志目录下去找日志文件。每一个应用实例还会设置日志滚动策略(如:天天生成一个文件),还有日志压缩归档策略等。这样一系列流程下来,对于咱们排查故障以及及时找到故障缘由,形成了比较大的麻烦。所以,若是咱们能把这些日志集中管理,并提供集中检索功能,不只能够提升诊断的效率,同时对系统状况有个全面的理解,避免过后救火的被动。


准备工做

  • centos7.x
  • 内存要够大(试水的能够忽略,自定义启动分配好内存就OJBK)~
  • 安装docker(安装教程:juejin.im/post/5b3a25…)

ELK镜像下载与安装

一、拉取ELK镜像(阿里云服务器仍是挺快的~)

docker pull sebp/elk
# 查看elk版本信息以下
docker inspect sebp/elk
复制代码


二、启动ELK容器

notes: 启动前要保证内存足够

默认启动(内存占用将会接近2G)nginx

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk复制代码

自定义启动web

# 参数解释:docker

TZ:默认Etc/UTC
ES_HEAP_SIZE:默认elaticsearch堆的最大值1G,最小值256M 
LS_HEAP_SIZE:默认Logstash的堆大小是500M
ELASTICSEARCH_START: 是否启动elasticsearch, 0-不启动 1-启动
LOGSTASH_START:是否启动Logstash, 0-不启动 1-启动
KIBANA_START:是否启动Kibana, 0-不启动 1-启动复制代码

# 端口:shell

5601:访问Kibana的web端口
9200:elasticsearch API查询接口
5044:Logstash Beats接口,接收来自Beats(如Filebeat)的日志复制代码

docker run 
-p 5601:5601 
-p 9200:9200 
-p 5044:5044 
-it 
-e TZ="Asia/Shanghai" 
-e ES_HEAP_SIZE="256m" 
-e LS_HEAP_SIZE="256m" 
--name elk sebp/elk复制代码

启动可能遇到的问题: centos

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] bash

解决办法:服务器

 在/etc/sysctl.conf文件末尾添加配置vm.max_map_count=262144
网络

移除ELK容器后重启可能会出现以下问题: 
elasticsearch

service endpoint with name xxx already exists. 
解决办法: 清理ELK容器的网络占用 
docker network disconnect --force bridge elk

三、访问Kibana

tips: 服务器有防火墙firewall,请先开放端口5601再进行访问。

firewall-cmd --zone=pubic --add-port=5601/tcp --permanent复制代码

# 访问以下端口:tcp

http://192.168.184.134:5601


# 至此则搭建完成~

Logstash模拟日志输出

# 进入ELK容器shell终端

docker exec -it elk /bin/bash复制代码

# 打开Logstash日志输入控制台

/opt/logstash/bin/logstash --path.data /tmp/logstash/data -e 'input{ stdin{} } output{ elasticsearch{hosts=>["localhost"]} }'复制代码

Filebeat收集日志


一、拉取Filebeat镜像

docker pull docker.elastic.co/beats/filebeat:7.0.1复制代码

二、创建初始环境:该setup命令加载用于写入Elasticsearch的推荐索引模板,并部署示例仪表板以在Kibana中可视化数据。这是一次性设置步骤

docker run docker.elastic.co/beats/filebeat:7.0.1 setup -E setup.kibana.host=192.168.184.134:5601 -E output.elasticsearch.hosts=["192.168.184.134:9200"]复制代码


三、Logstash配置

# 进入ELK容器shell终端

docker exec -it elk /bin/bash复制代码

# 修改配置文件(/etc/logstash/conf.d/02-beats-input.conf)以下

input {
  beats {
    port => 5044
  }
}复制代码

这里删除的ssl证书配置,由于此处不须要证书。

四、配置Filebeat收集Nginx日志

#  建立配置文件以下: /opt/filebeat/filebeat.docker.yml 

filebeat:
  # 日志输入源
  inputs:
  - type: log
    enabled: true
    paths:
    - /var/log/nginx/*.log
# 日志输出源Logstash
output:
  logstash:    
    hosts: ["192.168.184.134:5044"] 复制代码

# 启动容器

docker run -d 
--name=filebeat 
--user=root 
# 配置文件(输入、输出、模块nginx?)
--volume="/opt/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" 
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" 
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"
# 映射本地nginx日志文件到docker容器 
--volume="/var/log/nginx:/var/log/nginx"
docker.elastic.co/beats/filebeat:7.0.1 
filebeat 
-e -strict.perms=false 复制代码

docker run -d --name=filebeat --user=root --volume="/opt/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" --volume="/var/log/nginx:/var/log/nginx" docker.elastic.co/beats/filebeat:7.0.1 filebeat -e -strict.perms=false复制代码

# 打开Kibana -> Logs查询nginx日志

五、配置Filebeat收集Docker应用日志

# 建立配置文件以下: /opt/filebeat/filebeat.docker.yml (收集镜像名为gold的全部容器的日志)

filebeat.autodiscover:  
 providers:  
 - type: docker    
    hints.enabled: true    
 templates:    
 - condition:        
 contains:          
        docker.container.image: gold
output:  
 logstash:    
 hosts: ["192.168.184.134:5044"]复制代码

# 启动Filebeat容器

docker run -d 
--name=filebeat-gold
--user=root 
# 挂载本地配置文件(输入、输出、模块nginx?)
--volume="/opt/gold/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" 
# 挂载容器
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" 
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"
docker.elastic.co/beats/filebeat:7.0.1 
filebeat 
-e -strict.perms=false 复制代码

docker run -d --name=filebeat-gold --user=root --volume="/opt/gold/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" docker.elastic.co/beats/filebeat:7.0.1 filebeat -e -strict.perms=false  复制代码

# 打开Kibana查看gold日志



                                    

相关文章
相关标签/搜索