Docker 日志管理

news2024/12/29 10:01:53

一、ELK -Filebeat

Elasticsearch 数据的存储和检索 

常用端口:

9100:elasticsearch-head提供web访问

9200:elasticsearch与其他程序连接或发送消息

9300:elasticsearch集群状态

Logstash 有三个组件构成input,fileter,output

常用端口:5044

Kibana 数据的可视化

常用端口:5601

Filebeat 采集日志

       Filebeat 是 ELK 组件的新成员, 也是 Beat 成员之一。基于 Go 语言开发,无任何依赖,并且比 Logstash 更加轻量, 不会带来过高的资源占用, 非常适合安装在生产机器上。轻量意味着简单,Filebeat 并没有集成和 Logstash 一样的正则处理功能, 而是将收集的日志原样输出。
      以下是 Filebeat 的工作流程: 当开启 Filebeat 程序的时候,它会启动一个或多个检测进程(prospectors) 找到指定的日志目录或文件。对于探测器找出的每一个日志文件,Filebeat 启动读取进程(harvester)。每读取一个日志文件的新内容,便发送这些新的日志数据到处理程序(spooler) 。最后,Filebeat 会发送数据到指定的地点 (比如 logstash、elasticserach)。
       正是以上原因,目前, Filebeat 已经完全替代了 Logstash 成为新一代的日志采集器。同时,鉴于它的轻量、安全等特点,越来越多人开始使用它。

基于ELKF集群架构

Docker 日志管理缺陷 

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

二、实验部署

实验的基本环境部署

镜像+软件包

[root@localhost ~]# vim /etc/sysctl.conf

vm.max_map_count=655360

备注:

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

Vm 虚拟

Map映射

Count数量

[root@localhost ~]# sysctl -p           (立刻执行+检查语法)

[root@localhost ~]# vim /etc/security/limits.conf

* soft nofile 65535                no :number数量

* hard nofile 65535             硬链接  文件数量限制

* soft nproc 65535                进程数量

* hard nproc 65535 

* soft memlock unlimited       是否锁定内存

* hard memlock unlimited   硬限制

[root@localhost ~]# docker network create ELK-kgc    (创建ELK-kgc,所有网络加入,利用容器名称进行访问)

[root@localhost ~]# docker network ls    (查看网络类型)

1.构建Elasticsearch

1)创建 Elasticsearch 工作目录

[root@localhost ~]# mkdir elk

[root@localhost ~]# mkdir -p elk/elasticsearch

[root@localhost ~]# cd elk/elasticsearch

[root@localhost ]# cp elasticsearch-7.10.0-linux-x86_64.tar.gz elk/elasticsearch/      (上传 elasticsearch 的源码包到   elk/elasticsearch 目录下)

(2)修改elasticsearch.yml配置文件

[root@localhost elasticsearch]# cd elasticsearch-7.10.0
[root@localhost elasticsearch-7.10.0]# ls
bin  config  jdk  lib  LICENSE.txt  logs  modules  NOTICE.txt  plugins  README.asciidoc
[root@localhost elasticsearch-7.10.0]# cd config/
[root@localhost config]# ls
elasticsearch.yml  jvm.options.d      role_mapping.yml  users
jvm.options        log4j2.properties  roles.yml         users_roles
[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 。   ["elasticsearch"] 是容器名称

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

(3)Dockerfile文件

FROM centos:7

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 https://mirrors.aliyun.com/repo/epel-7.repo
RUN yum clean all

RUN yum -y install java-11 vim net-rools

ADD elasticsearch-7.10.0-linux-x86_64.tar.gz /usr/local/

RUN mkdir -p /path/to/logs
RUN mkdir -p /path/to/data

COPY elasticsearch.yml /usr/local/elasticsearch-7.10.0/config
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

RUN useradd es
RUN chown -R es:es /path/to/logs
RUN chown -R es:es /path/to/data
RUN chown -R es:es /usr/local/elasticsearch-7.10.0/

EXPOSE 9200
EXPOSE 9300

CMD su es /usr/local/elasticsearch-7.10.0/bin/elasticsearch
 

[root@localhost elasticsearch]# docker build -t elasticsearch .          (构建 Elasticsearch 镜像 )

 

2.构建kibana镜像

(1)创建目录

[root@localhost elk]# mkdir kibana

[root@localhost ~]# cp kibana-7.10.0-linux-x86_64.tar.gz elk/kibana/
[root@localhost ~]# cd elk/kibana/
[root@localhost kibana]# ls
kibana-7.10.0-linux-x86_64.tar.gz
[root@localhost kibana]# tar zxvf kibana-7.10.0-linux-x86_64.tar.gz 

(2)kibana.yml文件

[root@localhost kibana]# ls
kibana-7.10.0-linux-x86_64  kibana-7.10.0-linux-x86_64.tar.gz
[root@localhost kibana]# cd kibana-7.10.0-linux-x86_64
[root@localhost kibana-7.10.0-linux-x86_64]# ls
bin     data         node          NOTICE.txt    plugins     src
config  LICENSE.txt  node_modules  package.json  README.txt  x-pack
[root@localhost kibana-7.10.0-linux-x86_64]# vim config/kibana.yml 
[root@localhost kibana-7.10.0-linux-x86_64]# cp config/kibana.yml /root/elk/kibana/

(3)Dockerfile

FROM centos:7
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 https://mirrors.aliyun.com/repo/epel-7.repo
RUN yum clean all

RUN yum -y install java-11 vim 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
RUN 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

[root@localhost kibana]# docker build -t kibana .

3. 创建logstash镜像

(1)创建目录

[root@localhost elk]# mkdir logstash
[root@localhost ~]# cp logstash-7.10.0-linux-x86_64.tar.gz elk/logstash/
[root@localhost ~]# cd elk/logstash/
[root@localhost logstash]# ls
logstash-7.10.0-linux-x86_64.tar.gz
 

(2)创建dockerfile文件

[root@localhost logstash]# vim dockerfile

FROM centos:7
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 https://mirrors.aliyun.com/repo/epel-7.repo
RUN yum clean all
RUN yum -y install vim java-11 net-tools

ADD logstash-7.10.0-linux-x86_64.tar.gz /usr/local/
ADD nginx-log.conf /opt/logstash/conf/nginx-log.conf
EXPOSE 5044
COPY run.sh /run.sh
RUN chmod +x /run.sh
CMD ["/run.sh"]
 

(3)创建 CMD 运行的脚本文件

#!/bin/bash
/usr/local/logstash-7.10.0/bin/logstash -f /opt/logstash/conf/nginx-log.conf
 

(4)编写配置文件

[root@localhost logstash]# vim nginx-log.conf

input {              (输入)

  beats {                  (日志来源是filebeat)

    port => "5044"            (该端口用来连接filebeat)

    codec => "json"      (编码格式)

 }

}

output{                

    elasticsearch {           (日志转发对象)

      hosts => ["elasticsearch:9200"]          (容器名称:端口)

      manage_template => false            (是否启用模板:否)

      index => "www-bdqn-cn-pro-access-%{+YYYY.MM.dd}"    (索引名称)

    }

}

[root@localhost logstash]# mkdir -p /opt/logstash/conf
[root@localhost conf]# cp /root/elk/logstash/nginx-log.conf  /opt/logstash/con

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

4.构建filebeat镜像

(1)创建目录

[root@localhost elk]# mkdir filebeat

[root@localhost ~]# cp filebeat-7.10.0-linux-x86_64.tar.gz elk/filebeat/

(2)编辑filebeat.yml文件

[root@localhost filebeat]# vim filebeat.yml

filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/access.log
  tags: ["www-kgc-access"]

output.logstash:
  hosts: ["logstash:5044"]
 

(3)编辑dockerfile

[root@localhost filebeat]# vim dockerfile

FROM centos:7
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 https://mirrors.aliyun.com/repo/epel-7.repo
RUN yum clean all

RUN yum -y install java-11 net-tools vim
ADD filebeat-7.10.0-linux-x86_64.tar.gz /usr/local/
COPY filebeat.yml /usr/local/filebeat-7.10.0-linux-x86_64/

ADD run.sh /run.sh

RUN chmod 755 /*.sh

CMD ["/run.sh"]

(4)创建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”相关的消息。

启动nginx进行日志输出

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

nginx-ELK  日志名称

nginx:latest   镜像和标签

[root@localhost ~]# curl  192.168.10.101         (访问日志)

[root@localhost ~]# cat /var/log/nginx/access.log      (查看日志)

5.启动镜像

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

elasticsearch 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

6.Kibana web访问即可

192.168.10.101:5601

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

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

相关文章

网安行业薪资:「3人拿4干5」

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s…

计算机毕业设计 农家乐管理平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

Linux | Linux开发工具链全攻略:yum、vim、gcc/g++、GDB、Makefile与git版本控制

目录 Linux开发环境全解析:工具、编程与版本控制 1、软件包管理器YUM 查看可用的软件包 安装软件包 更新软件包 卸载软件包 查找软件包信息 清理缓存 检查可更新的软件包 显示软件包的依赖关系 2、Vim编辑器 vim的三种模式:命令模式、插入模…

计算机基础知识复习8.13

cookie和session区别 cookie:是服务器发送到浏览器,并保存在浏览器端的一小块数据 浏览器下次访问服务时,会自动携带该块数据,将其发送给服务器 session:是javaEE标准,用于在服务端记录客户端信息 数据存放在服务端更加安全&a…

Leetcode JAVA刷刷站(14)最长公共前缀

一、题目概述 二、思路方向 在Java中,要编写一个函数来查找字符串数组中的最长公共前缀,我们可以遵循以下步骤: 处理边界条件:如果数组为空或长度为0,直接返回空字符串。初始化最长公共前缀:将数组的第一个…

[0CTF 2016]piapiapia1

打开题目 看到登录口 字符串绕过长度限制strlen($_POST[nickname]) > 10

Json Formatter工具

JSON 格式化工具的选择与使用 作为开发人员,我们经常需要查看和格式化 JSON 数据。虽然市面上有很多 JSON 工具可以满足这一需求,但在某些情况下,标准的 JSON 工具可能并不够用。 例如,处理一个 JavaScript 对象的格式&#xff…

【Qt】QWidget的windowTitle属性

QWidget的windowTitle属性 API说明 windowTitle() 获取到控件的窗⼝标题. setWindowTitle(const QString& title) 设置控件的窗⼝标题. 例子:设置窗口标题 当前windowTitle属性是从属于Qwidget的,Qwidget是一个广泛的定义,window…

Qt第十四章 模型视图

Model/View(模型/视图)结构 文章目录 Model/View(模型/视图)结构简介视图组件Model/View结构的一些概念项目控件组(item Widgets)模型/视图 如何使用项目视图组设置行的颜色交替变换拖拽设置编辑操作其他操作 选择模型自定义选择多…

打靶记录10——hacksudo---Thor

靶机: https://download.vulnhub.com/hacksudo/hacksudo---Thor.zip难度: 中 目标: 取得root权限flag 涉及攻击方法: 主机发现端口扫描Web目录爬取开源源码泄露默认账号密码SQL注入破壳漏洞GTFOBins提权 主机发现&#xff…

Windows的cmd命令行使用Linux类命令

Windows的cmd使用Linux类命令 去我的个人博客观看,观感更佳哦,😙😙 前言 我在使用Vscode编写C/C代码的时候,经常会用到Shell(你可以理解为命令行),但是我不得不说Windows下Dos命令极其难用且拉跨&#x1f…

【应用层协议】自定义协议 {定义结构化数据;数据格式转换:序列化和反序列化,使用json库进行数据格式交换;分包和解包:为报文内容添加报头}

一、简单了解TCP协议(引子) 1.1 三次握手 三次握手就是客户端向服务端发起连接的过程 服务器初始化 调用socket,创建套接字文件 调用bind,将当前的文件描述符和ip/port绑定在一起;如果这个端口已经被其他进程占用了&…

整理 酷炫 Flutter 开源UI框架 按钮

flutter_percent_indicator Flutter 百分比指示器库 项目地址:https://github.com/diegoveloper/flutter_percent_indicator 项目Demo:https://download.csdn.net/download/qq_36040764/89631340

springboot整合doris(doris创建表)

Doris 的数据模型主要分为 3 类: 明细模型(Duplicate Key Model):允许指定的 Key 列重复;适用于必须保留所有原始数据记录的情况主键模型(Unique Key Model):每一行的 Key 值唯一;可确保给定的 Key 列不会存在重复行聚合模型(Aggregate Key Model):可根据 Key 列聚…

力扣每日一题 特殊数组 II 前缀和

Problem: 3152. 特殊数组 II &#x1f468;‍&#x1f3eb; 参考题解 Code class Solution {public boolean[] isArraySpecial(int[] nums, int[][] queries) {int[] s new int[nums.length];for (int i 1; i < nums.length; i) {s[i] s[i - 1] (nums[i - 1] % 2 num…

用R语言进行数据的特征缩放主要方法

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容&#xff0c;每篇文章都在 5000 字以上&#xff0c;质量平均分高达 94 分&#xff0c;看全文请点击下面链接&#xff1a; 4章11节&#xff1a;用R做数据重塑&#xff0c;数据的特征缩放和特征可视化-CSDN博客文…

第八季完美童模全球冠军·韩嘉滢 破浪扬帆写就传奇

在这个充满奇迹与梦想的舞台上&#xff0c;星光少女韩嘉滢以她独有的光芒&#xff0c;照亮了第八季完美童模的每一个角落。从亚特兰蒂斯的神秘海域到典故里的中国古韵&#xff0c;她以多变的风格与卓越的表现&#xff0c;征服了全球观众的心&#xff0c;最终荣登全球冠军的宝座…

K8S资源之Service

概念 将一组 Pods 公开为网络服务的抽象方法。 ClientIP 模型 集群内访问类型。 命令行 # 暴露端口 kubectl expose deployment my-dep-nginx --port8000 --target-port80Yml文件 apiVersion: v1 kind: Service metadata:labels:app: my-dep-nginxname: my-dep-nginx spe…

中小型企业可用的数据采集监控平台 为生产带来众多改变

中小型企业采用数据采集监控平台可以显著提升生产效率、优化生产流程、增强决策能力&#xff0c;并带来一系列积极的改变。 数据采集监控平台可提供从边缘感知设备到云端的数据采集、存储、分析、可视化等服务&#xff0c;实现生产工艺流程仿真、设备运行状态监控、数据报表、趋…

渗透测试实战-菠菜站渗透测试(Nacos反序列化漏洞利用)

免责声明&#xff1a;文章来源于真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本…