Docker日志管理

news2025/1/12 9:11:12

一、知识点介绍

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)索引模式--》创建索引模式

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2040085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

django常用的组合搜索组件

文章目录 django常用的组合搜索组件快速使用配置信息1. 视图函数2. 前端模板3. css样式 代码实现 django常用的组合搜索组件 在项目开发中,如果有大量数据就要用到组合搜索,通过组合搜索对大块内容进行分类筛选。 快速使用 三步走:&#xf…

刷题记录第110天-分割等和数组

解题思路: 问题可转化为,用给定数组能否装满一个容量为数组总和一半的背包(targetsum/2),即一个0-1背包问题。 0-1背包问题的关键在于数组的定义和状态转移方程以及价值的定义。dp[i][j]表示在[0…i]个物品内,背包容量为j能装的最…

再升级!MoneyPrinterPlus集成GPT_SoVITS

最近有很多优秀的语音合成TTS工具,目前MoneyPrinterPlus已经集成了ChatTTS和fasterWhisper。应朋友们的要求,最近MoneyPrinterPlus也集成了GPT_SoVITS这个优秀的语音合成工具。 今天给大家详细讲解一下,如何在MoneyPrinterPlus中使用GPT_SoV…

机器学习速成第三集——无监督学习之降维(理论部分)!

目录 主成分分析(PCA) 独立成分分析(ICA) t分布随机邻近嵌入(t-SNE) 线性判别分析(LDA) 其他降维方法 应用场景 主成分分析(PCA)在处理大规模数据集时…

新能源汽车电机低频电磁场仿真应用

一、背景介绍 随着新能源汽车的普及,电机作为新能源汽车驱动系统的核心组成部分,其重要性不言而喻。电机使电能转化为机械能,通过传动系统将机械能传递到车轮,驱动汽车行驶。新能源汽车电机的发展经历了从初步探索到技术成熟的多…

Localization Translate API 的对接和使用

Localization Translate API 的对接和使用 Localization Translate API 的主要功能是通过输入需要翻译的文本来获取翻译后的文本,同时翻译后的语言可以自定义,并且翻译结果可以采用 json , markdown 俩种主流的方法来输出。 本文档将详细介…

【安卓】多线程编程

文章目录 线程的简单应用解析异步消息处理机制使用AsyncTask 线程的简单应用 新建一个AndroidThreadTest项目&#xff0c;然后修改activity_main.xml中的代码。 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width…

CNN-GRU神经网络多输入单输出回归预测【MATLAB】

1. CNN&#xff08;卷积神经网络&#xff09;部分 作用&#xff1a; 特征提取&#xff1a;CNN擅长从输入数据中提取空间特征。在多输入情况下&#xff0c;它可以处理来自不同源的数据&#xff0c;提取有用的特征。 局部感受野&#xff1a;通过卷积操作&#xff0c;CNN能够识别…

【ACM出版,往届会后三个半月EI见刊/检索】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)

2024年第四届物联网与机器学习国际学术会议&#xff08;IoTML 2024&#xff09;将于2024年8月23-25日在中国南昌召开。 会议将围绕着物联网和机器学习开展&#xff0c;探讨本领域发展所面临的关键性挑战问题和研究方向&#xff0c;以期推动该领域理论、技术在高校和企业的发展和…

vector嵌套之空指针异常

文章目录 1. 题目链接2. 题目代码正确代码错误代码 1. 题目链接 118. 杨辉三角 2. 题目代码 正确代码 class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> result(numRows);for(int i 0; i < numRows; i)…

STL中的栈(stack)和队列(queue)以及简单(复用)实现

适配器&#xff1a; 虽然 stack 和 queue 中也可以存放元素&#xff0c;但在 STL 中并没有将其划分在容器的行列&#xff0c;而是将其称为 容器适配器 &#xff0c;这是因为 stack 和队列只是对其他容器的接口进行了包装&#xff0c; STL 中 stack 和 queue 默认使用deque 换种…

【云备份】学习Json

文章目录 1.Json数据类型基础数据类型复合数据类型JSON数据类型的应用 2.学习jsoncpp库利用json实现序列化利用json实现反序列化 1.Json数据类型 json 是一种数据交换格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。json数据交换格式是将多种数据对象组织…

CVE-2024-38077 Windows远程桌面授权服务漏洞介绍

CVE-2024-38077 是一个在Windows远程桌面授权服务&#xff08;Remote Desktop Licensing Service&#xff09;中存在的严重远程代码执行漏洞。以下是关于此漏洞的详细信息&#xff1a; 漏洞概述 漏洞编号&#xff1a;CVE-2024-38077漏洞类型&#xff1a;远程代码执行 (RCE)影…

基于单片机控制的多功能智能语音风扇

【摘要】 本文简述了一种基于单片机控制的智能多功能语音风扇的设计&#xff0c;该设计以STC11L08XE单片机为主控制器&#xff0c;通过YS-LDV7语音模块对语音信号进行采集识别&#xff0c;并将该信号上传给单片机进而控制风扇的转速和开关&#xff0c;以达到语音控制的效果。该…

Python 安装 PyTorch详细教程

本章教程,介绍如何安装PyTorch,介绍两种安装方式,一种是通过pip直接安装,一种是通过conda方式安装。 一、查看CUDA版本 二、安装PyTorch 1、pip安装方式 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1162、conda安装方式 …

Leetcode—3151. 特殊数组 I【简单】

2024每日刷题&#xff08;155&#xff09; Leetcode—3151. 特殊数组 I 实现代码 class Solution { public:bool isArraySpecial(vector<int>& nums) {int n nums.size();for(int i 1; i < n; i) {if(nums[i - 1] % 2 nums[i] % 2) {return false;}}return t…

【数据结构-前缀哈希】力扣1124. 表现良好的最长时间段

给你一份工作时间表 hours&#xff0c;上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候&#xff0c;那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」&#xff0c;意味在这段时间内&#xff0c;「劳累的天数」是严格 大…

练习实践-基础设施-文件共享-linux间的文件共享-NFS服务搭建

参考来源&#xff1a; nfs安装配置-Debian/Ubuntu 什么是NFS&#xff1f;NFS挂载 NFS详解&#xff08;概念实验演示&#xff09; 快速回顾&#xff1a; nfs服务器搭建&#xff1a;1>.服务器端&#xff1a;1&#xff09;创建共享目录2&#xff09;修改配置文件/etc/exports…

深入解析三路快排:一种高效的排序算法

在数据结构和算法的世界中&#xff0c;快排&#xff08;Quick Sort&#xff09;无疑是最受欢迎的排序算法之一。今天&#xff0c;探讨一种优化的快排变体——三路快排&#xff08;3-Way Quick Sort&#xff09;&#xff0c;它在处理具有重复元素的数组时展现出了令人惊叹的效率…

PCIe学习笔记(22)

Transaction Ordering Transaction Ordering Rules 表2-40定义了PCI Express Transactions的排序要求。该表中定义的规则统一适用于PCI Express上所有类型的事务&#xff0c;包括内存、I/O、配置和消息。该表中定义的排序规则适用于单个流量类(TC)。不同TC标签的事务之间没有…