Docker日志管理

一、知识点介绍

1.ELK(Elasticserach、Logstash、Kibana)

前面笔记有

2.什么是 Filebeat

        Filebeat 是 ELK 组件的新成员, 也是 Beat 成员之一。基于 Go 语言开发,无任何依赖并且比 Logstash 更加轻量,不会带来过高的资源占用, 非常适合安装在生产机器上。轻量意味着简单,Filebeat 并没有集成和 Logstash 一样的正则处理功能, 而是将收集的日志原样输出。

        以下是 Filebeat 的工作流程:当开启 Filebeat 程序的时候,它会启动一个或多个检测进程(prospectors) 找到指定的日志目录或文件。对于探测器找出的每一个日志文件,Filebeat 启动读取进程(harvester)。每读取一个日志文件的新内容,便发送这些新的日志数据到处理程序(spooler)。最后,Filebeat 会发送数据到指定的地点(比如logstash、elasticserach)。

        正是以上原因, 目前, Filebeat 已经完全替代了 Logstash 成为新一代的日志采集器。同时,鉴于它的轻量、安全等特点,越来越多人开始使用它。

3.Docker 日志管理架构缺陷

        ELK 架构适合于日志规模比较庞大的情况。但由于 Logstash 日志解析节点和Elasticsearch 的负荷比较重,可将其配置为集群模式,以分担负荷。引入消息队列,均衡了网络传输, 从而降低了网络闭塞,尤其是丢失数据的可能性,但依然存在 Logstash 占用系统资源过多的问题。

二、案列环境

1.案列实验环境

2.案例需求

(1)利用 ELKF 收集容器里面的日志。
(2)通过 Kibana 将收集到日志做图表分析。

3.案例实现思路

(1)准备系统环境。
(2)构建 ELKF 组件镜像。
(3)创建 ELKF 容器收集容器里面的 Nginx 日志。
(4)创建 Kibana 图形展示。

三、案例实施

基于 Docker 环境部署 ELKF 日志分析系统,实现日志分析功能。

1.系统环境准备

1)修改系统参数
[root@localhost ~]# vim /etc/sysctl.conf
vm.max_map_count=655360 

备注:

max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量(字节)

[root@localhost ~]# sysctl -p 
[root@localhost ~]# vim /etc/security/limits.conf 
* soft nofile 65535 
* hard nofile 65535 
* soft nproc 65535 
* hard nproc 65535 
* soft memlock unlimited 
* hard memlock unlimited
2)单独创建 ELK-kgc 网络桥接
[root@localhost ~]# docker network create ELK-kgc 
[root@localhost ~]# docker network ls 

2.基于 Dockerfile 构建 Elasticsearch 镜像

1)创建 Elasticsearch 工作目录
[root@localhost ~]# mkdir /root/elk
[root@localhost ~]# mkdir -p /root/elk/elasticsearch 
[root@localhost ~]# cd /root/elk/elasticsearch
上传 elasticsearch 的源码包到/root/elk/elasticsearch 目录下
(2)修改es配置文件
[root@localhost Elasticsearch]#  tar zxvf elasticsearch-7.10.0-linux-x86_64.tar.gz
[root@localhost elasticsearch]# cd elasticsearch-7.10.0/config
[root@localhost config]# vim elasticsearch.yml
cluster.name: my-application		##17行,群集名称
node.name: elasticsearch		##23行,本节点主机名
path.data: /path/to/data		##33行,数据文件路径
path.logs: /path/to/logs		##37行,日志文件路径
network.host: 0.0.0.0		##55行,监听地址
http.port: 9200		##59行,监听端口
cluster.initial_master_nodes: ["elasticsearch"]   ##72,master主机名称,群集的初始化会将此节点选举为master
[root@localhost config]# cp elasticsearch.yml /root/elk/elasticsearch 
(3)编写 Elasticsearch Dockerfile 文件
[root@localhost Elasticsearch]# vim dockerfile 
FROM centos:7
MAINTAINER wjq@kgc
#RUN yum -y install wget
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#RUN curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://192.168.2.149/repo/CentOS-Base.repo
#RUN curl -o /etc/yum.repos.d/epel.repo ftp://192.168.2.149/repo/epel.repo
RUN yum clean all
RUN yum -y install java-11 vim telnet lsof net-tools
ADD elasticsearch-7.10.0-linux-x86_64.tar.gz /usr/local/
RUN mkdir -p /path/to/data
RUN mkdir -p /path/to/logs
COPY elasticsearch.yml /usr/local/elasticsearch-7.10.0/config/
RUN useradd es && chown -R es:es /usr/local/elasticsearch-7.10.0/
RUN chmod +x /usr/local/elasticsearch-7.10.0/bin/*
RUN chown -R es:es /path/to/data
RUN chown -R es:es /path/to/logs
RUN sed -i s/-Xms1g/-Xms4g/g /usr/local/elasticsearch-7.10.0/config/jvm.options
RUN sed -i s/-Xmx1g/-Xmx4g/g /usr/local/elasticsearch-7.10.0/config/jvm.options
EXPOSE 9200
EXPOSE 9300
CMD su es /usr/local/elasticsearch-7.10.0/bin/elasticsearch
(4)构建 Elasticsearch 镜像
[root@localhost Elasticsearch]# docker build -t elasticsearch . 

3.基于 Dockerfile 构建 Kibana 镜像

执行步骤如下:

1)创建 Kibana 工作目录
[root@localhost ~]# mkdir -p /root/elk/kibana 
2)上传 kibana 的源码包

上传 kibana 的源码包到/root/elk/kibana 目录下

3)编写 Kibana Dockerfile 文件
[root@localhost ~]# cd /root/elk/kibana 
[root@localhost kibana]# tar zxvf kibana-7.10.0-linux-x86_64.tar.gz 
[root@localhost kibana]# cd kibana-7.10.0-linux-x86_64/config/
[root@localhost config]# vim kibana.yml 

server.port: 5601		##2行,监听端口
server.host: "0.0.0.0"		##7行,监听地址
server.name: "kibana"    ##25
elasticsearch.hosts: ["http://elasticsearch:9200"]		##28行,ES主机的IP地址
i18n.locale: "zh-CN"		##107

[root@localhost config]# cp kibana.yml /root/elk/kibana/
[root@localhost config]# cd /root/elk/kibana

[root@localhost kibana]# vim dockerfile 
FROM centos:7
MAINTAINER wjq@kgc
#RUN yum -y install wget
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#RUN curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://192.168.2.149/repo/CentOS-Base.repo
#RUN curl -o /etc/yum.repos.d/epel.repo ftp://192.168.2.149/repo/epel.repo
RUN yum clean all
RUN yum -y install java-11 vim telnet lsof net-tools
ADD kibana-7.10.0-linux-x86_64.tar.gz /usr/local/ 
COPY kibana.yml /usr/local/kibana-7.10.0-linux-x86_64/config/
EXPOSE 5601 
RUN useradd es && chown -R es:es /usr/local/kibana-7.10.0-linux-x86_64/
CMD su es /usr/local/kibana-7.10.0-linux-x86_64/bin/kibana

备注:

kibana不能用root用户执行,如果用root执行,需要--allow-root选项

4)构建 kibana 镜像
[root@localhost kibana]# docker build -t kibana .

4.基于 Dockerfile 构建 Logstash 镜像

执行步骤如下:

1)创建 Logstash 工作目录
[root@localhost ~]# mkdir -p /root/elk/logstash 
2)上传 logstash 的源码包

上传 logstash 的源码包到/root/elk/logstash 目录下

3)编写 Logstash Dockerfile 文件
[root@localhost ~]# cd /root/elk/logstash 
[root@localhost logstash]# vim dockerfile 
FROM centos:7
MAINTAINER wjq@kgc
#RUN yum -y install wget
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#RUN curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://192.168.2.149/repo/CentOS-Base.repo
#RUN curl -o /etc/yum.repos.d/epel.repo ftp://192.168.2.149/repo/epel.repo

RUN yum clean all
RUN yum -y install java-11 vim telnet lsof net-tools
ADD logstash-7.10.0-linux-x86_64.tar.gz /usr/local/ 
RUN chmod -R 777 /usr/local/logstash-7.10.0/data/
ADD nginx-log.conf /opt/logstash/conf/nginx-log.conf
ADD run.sh /run.sh
RUN chmod 755 /*.sh
EXPOSE 5044
CMD ["/run.sh"]
4)创建 CMD 运行的脚本文件
[root@localhost logstash]# vim run.sh 
#!/bin/bash
/usr/local/logstash-7.10.0/bin/logstash -f /opt/logstash/conf/nginx-log.conf
5logstash 配置文件详解
[root@localhost ~]#mkdir -p /opt/logstash/conf
[root@localhost ~]# vim /opt/logstash/conf/nginx-log.conf
input {
  beats {
port => 5044
    codec => "json"

  }
}

filter {
    if "www-bdqn-cn-pro-access" in [tags] {
        grok {
match => {
      "message" => "%{IPV4:remote_addr} - (%{USERNAME:remote_user}|-) \[%{HTTPDATE:time_local}\] \"%{WORD:request_method} %{URIPATHPARAM:request_uri} HTTP/%{NUMBER:http_protocol}\" %{NUMBER:http_status} %{NUMBER:body_bytes_sent} \"%{GREEDYDATA:http_referer}\" \"%{GREEDYDATA:http_user_agent}\" \"(%{IPV4:http_x_forwarded_for}|-)\""
 } 
        }
    }
    urldecode {all_fields => true}
    date {
      match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
    }
    useragent {
      source => "agent"
      target => "ua"
    }
}


output {
  if "www-bdqn-cn-pro-access" in [tags] {
    elasticsearch {
      hosts => ["elasticsearch:9200"]
      manage_template => false
      index => "www-bdqn-cn-pro-access-%{+YYYY.MM.dd}"
    }
}
}

备注:

可以用如下简洁的写法

input {
  beats {
    port => "5044"
    codec => "json"
 }
}

output{
    elasticsearch {
      hosts => ["elasticsearch:9200"]
      manage_template => false
      index => "www-bdqn-cn-pro-access-%{+YYYY.MM.dd}"
    }
}

[root@localhost logstash]# cp /opt/logstash/conf/nginx-log.conf /root/elk/logstash/
6) 构建 logstash 镜像
[root@localhost logstash]# docker build -t logstash .

5.基于 Dockerfile 构建 Filebeat 镜像

1)创建 Filebeat 工作目录
[root@localhost ~]# mkdir -p /root/elk/filebeat
2)编写 Filebeat Dockerfile 文件
[root@localhost ~]# cd /root/elk/filebeat 
3)上传 Filebeat 的源码包和 Filebeat 配置文件

上传 Filebeat 的源码包和 Filebeat 配置文件到/root/elk/filebeat 目录下

[root@localhost Filebeat]# vim dockerfile
FROM centos:7
MAINTAINER wjq@kgc
#RUN yum -y install wget
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#RUN curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://192.168.2.149/repo/CentOS-Base.repo
#RUN curl -o /etc/yum.repos.d/epel.repo ftp://192.168.2.149/repo/epel.repo

RUN yum clean all
RUN yum -y install java-11 vim telnet lsof net-tools
ADD filebeat-7.10.0-linux-x86_64.tar.gz /usr/local/
#RUN cd /usr/local/filebeat-7.10.0-linux-x86_64
RUN mv /usr/local/filebeat-7.10.0-linux-x86_64/filebeat.yml /root/
COPY filebeat.yml /usr/local/filebeat-7.10.0-linux-x86_64/
ADD run.sh /run.sh
RUN chmod 755 /*.sh
CMD ["/run.sh"]
4Filebeat 配置文件详解查看 Filebeat 的配置文件。
[root@localhost filebeat]# vim filebeat.yml 
filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/access.log
  tags: ["www-bdqn-cn-pro-access"]

output.logstash:
  hosts: ["logstash:5044"]
5)创建 CMD 运行的脚本文件
[root@localhost Filebeat]# vim run.sh 
#!/bin/bash
/usr/local/filebeat-7.10.0-linux-x86_64/filebeat -e -c /usr/local/filebeat-7.10.0-linux-x86_64/filebeat.yml

备注:

-c:配置文件位置

-path.logs:日志位置

-path.data:数据位置

-path.home:家位置

-e:关闭日志输出

-d 选择器:启用对指定选择器的调试。 对于选择器,可以指定逗号分隔的组件列表,也可以使用-d“*”为所有组件启用调试.例如,-d“publish”显示所有“publish”相关的消息。

6)构建 Filebeat 镜像
[root@localhost Filebeat]# docker build -t filebeat .

6.启动 Nginx 容器做为日志输入源

[root@localhost ~]# docker run -itd -p 80:80 --network ELK-kgc -v /var/log/nginx:/var/log/nginx --name nginx-ELK nginx:latest

访问nginx网站,产生日志:

[root@localhost ~]# cat /var/log/nginx/access.log

7.启动 Filebeat+ELK 日志收集环境

1)启动 Elasticsearch
[root@localhost ~]# docker run -itd -p 9200:9200 -p 9300:9300 --network ELK-kgc -v /path/to/logs:/path/to/logs --name elasticsearch elasticsearch
2)启动 kibana
[root@localhost ~]# docker run -itd -p 5601:5601 --network ELK-kgc --name kibana kibana
3)启动 logstash
[root@localhost ~]# docker run -itd -p 5044:5044 --network ELK-kgc -v /opt/logstash/conf:/opt/logstash/conf --name logstash logstash
4)启动 Filebeat
[root@localhost ~]# docker run -itd --network ELK-kgc -v /var/log/nginx:/var/log/nginx --name filebeat filebeat

8.Kibana Web 管理

找到Managerment--》Stack Management--》(Kibana)索引模式--》创建索引模式

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值