Docker 日志管理
一、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 成为新一代的日志采集器。同时,鉴于它的轻量、安全等特点,越来越多人开始使用它。

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
相关文章:

Docker 日志管理
一、ELK -Filebeat Elasticsearch 数据的存储和检索 常用端口: 9100:elasticsearch-head提供web访问 9200:elasticsearch与其他程序连接或发送消息 9300:elasticsearch集群状态 Logstash 有三个组件构成input,fi…...

JavaScript初级——基础知识
一、JS的HelloWord 1、JS的代码需要编写到script标签中 2、JS的执行是根据语句从上到下一次执行的。 二、JS的编写位置 1、可以将js代码编写到标签的onclick属性中,当我们点击按钮时,js代码才会执行。 2、可以将js代码写在超链接的href属性中࿰…...

0817(持久层框架:JDBC,MyBatis)
三层架构(表现层,业务层,持久层) java中框架的概述(表现层、业务层、持久层的关系)_控制层业务层持久层的关系-CSDN博客 框架:框架一般处在低层应用平台(如J2EE)和高层…...

在亚马逊云科技上安全、合规地创建AI大模型训练基础设施并开发AI应用服务
项目简介: 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技利用Servi…...

无人机模拟训练室技术详解
无人机模拟训练室作为现代无人机技术培训的重要组成部分,集成了高精度模拟技术、先进的数据处理能力及高度交互的操作界面,为无人机操作员提供了一个安全、高效、接近实战的训练环境。以下是对无人机模拟训练室技术的详细解析,涵盖系统基础概…...

【Spring框架】
一、引言二、Spring核心概念三、Spring入门示例四、进一步了解Spring的依赖注入五、Spring的面向切面编程(AOP)六、总结 一、引言 Spring框架自2003年发布以来,凭借其轻量级、易于扩展的特性,在Java企业级应用开发领域得到了广泛…...

uniapp 日常业务 随便写写 源码
现成的组件 直接用 <template><view style"margin: 10rpx;"><view class"tea-header"><text class"tea-title">礼尚往来</text><view class"tea-view-all"><text>查看全部</text>&l…...

【软件测试】单元测试20套练习题
(一)概述 使用Java语言编写应用程序,设计测试数据,完成指定要求的白盒测试,对测试数据及相应测试结果进行界面截图,将代码以及相关截图粘贴到白盒测试报告中。 (二)题目要求...

8.16 day bug
bug1 题目没看仔细 额外知识 在 Bash shell 中,! 符号用于历史扩展功能。当你在命令行中输入 ! 后跟一些文本时,Bash 会尝试从你的命令历史中查找与该文本相匹配的命令。这是一种快速重用之前执行过的命令的方法。 如何使用历史扩展 基本用法: !strin…...

《Nginx核心技术》第11章:实现MySQL数据库的负载均衡
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀,…...

使用 Gnosis Safe 创建多签名钱包
创建多签名钱包可以通过多个步骤完成,具体取决于你使用的平台或工具。下面我将介绍使用 Gnosis Safe 创建多签名钱包的过程,因为它是目前以太坊生态中最受欢迎且功能强大的多签名钱包之一。 目录 使用 Gnosis Safe 创建多签名钱包1. 准备工作2. 访问 Gnosis Safe3. 创建多签名…...

LeetCode 算法:前 K 个高频元素 c++
原题链接🔗:前 K 个高频元素 难度:中等⭐️⭐️ 题目 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 示例 2…...

MySQL的SQL语句更新某个字段的值在原来值的基础上随机增加100~600
要在 MySQL 中更新某个字段的值,使其在原有值的基础上随机增加一个 100 到 600 之间的值,你可以使用 RAND() 函数来生成随机数,并结合其他 SQL 函数进行计算。以下是一个 SQL 更新语句的示例: UPDATE your_table_name SET your…...

LeetCode --- 410周赛
题目列表 3248. 矩阵中的蛇 3249. 统计好节点的数目 3250. 单调数组对的数目 I 3251. 单调数组对的数目 II 一、矩阵中的蛇 只要按照题目要求模拟即可,代码如下 class Solution { public:int finalPositionOfSnake(int n, vector<string>& commands…...

最佳的iPhone解锁软件和应用程序
在探讨最佳的iPhone解锁软件和应用程序时,我们需要考虑多个方面,包括软件的解锁能力、易用性、安全性、兼容性以及用户评价等。以下是对当前市场上几款优秀iPhone解锁软件和应用程序的详细分析,旨在为用户提供全面而深入的指导。 一、奇客iO…...
初等函数和它的表达式
常量函数,幂函数,指数函数,对数函数,三角函数和反三角函数成为基本初等函数。基本初等函数经过有限四则运算和符合运算得到的函数称为初等函数。 1. 常量函数 表达式: (其中 c 是常数)参数的意…...

Android 12系统源码_多屏幕(二)模拟辅助设备功能开关实现原理
前言 上一篇我们通过为Android系统开启模拟辅助设备功能开关,最终实现了将一个Activity显示到多个屏幕的效果。 本篇文章我们具体来分析一下当我们开启模拟辅助设备功能开关的时候,Android系统做了什么哪些操作。 一、模拟辅助设备功能开关应用位置 …...

【Go语言初探】(二)、项目文件结构和GOPATH设置
一、go语言项目文件结构 由go/bin、go/src和go/pkg三个子文件夹组成,见下图: 实际项目: 二、gopath路径变量设置 在项目中创建main.go文件后,IDE会提示设置GOPATH路径: 点击“configure GOPATH”,设置GOP…...

三种简单排序:插入排序、冒泡排序与选择排序 【算法 05】
三种简单排序:插入排序、冒泡排序与选择排序 在编程中,排序算法是基础且重要的知识点。虽然在实际开发中,我们可能会直接使用标准库中的排序函数(如C的std::sort),但了解并实现这些基础排序算法对于理解算法…...

Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]
本文介绍了GUI的图形界面编程(相关视频是哔站上的应该搜这个题目就能找到),文章还是很基础的,反正我是小白从0开始,主要的结构tinkter库、重要组件简介(这个不用死记硬背 用的时候再说)、Label&…...

Vue2和Vue3中的diff算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、diff算法是什么?二、vue2中的diff算法三、vue3中的diff算法总结 前言 一、diff算法是什么? diff算法很早就存在了,一开…...

springboot使用aop或Jackson进行数据脱敏
1.aop 启动类加EnableAspectJAutoProxy 自定义注解,在实体类中使用表示被脱敏字段 建立aop切面类 可能这里gpt会建议你用Pointcut("execution(public * com.xx.aop..*.get*(..))")这种方式拦截,这种我试了,拦截不住。猜测在mvc返…...

【Solidity】基础介绍
数据类型 值类型 值类型的变量在赋值或作为函数参数传递时会被复制。 布尔类型:bool整数类型: 无符号:uint8、uint16、…、uint256 (uint256 可简写为 uint)有符号:int8、int16、…、int256 (int256可简写为 int) 地址类型&…...

【SpringBoot3】双向实时通讯 websocket
文章目录 一、Websocket使用步骤二、示例1:继承抽象类 AbstractWebSocketHandler后端代码前端代码 三、示例2:使用注解ServerEndpoint后端代码前端代码 四、前端代码封装 一、Websocket使用步骤 在Spring Boot中使用WebSocket是一个常见的需求ÿ…...

搭建内网开发环境(一)|基于docker快速部署开发环境
引言 最近因需要搭建一套简易版的纯内网的开发环境,服务器采用 centos8.0,容器化技术采用 docker 使用 docker-compose 进行容器编排。 该系列教程分为两大类: 软件安装和使用,这类是开发环境常用的软件部署和使用,涉…...

MATLAB R2023b配置Fortran编译器
MATLAB R2023b配置Fortran编译器 引言1. 安装Visual Studio 20192. 安装Intel API20243. 配置xml文件文件4. 设置环境变量5. MATLAB编译Fortran 引言 当我们需要用到MATLAB编译Fortran代码后进行调用计算时,整个配置流程较繁琐。下面以MATLAB R2023b为例࿰…...

2024新型数字政府综合解决方案(七)
新型数字政府综合解决方案通过集成人工智能、大数据、区块链和云计算技术,创建了一个高度智能化和互联互通的政府服务平台,旨在全面提升行政效率、服务质量和透明度。该平台实现了跨部门的数据整合与实时共享,利用人工智能进行智能决策支持和…...

搭建高可用k8s集群
高可用 Kubernetes V1.28.10 安装 文章目录 1. 环境介绍2. 准备工作2.1 修改主机名称2.2 修改hosts文件2.3 关闭防火墙和SLinux2.4 配置SSH免密访问2.4.1 主机名称: k8s-master-01 操作 2.5 配置yum源2.6 禁用Swarp分区2.7 同步时间2.8 配置内核转发及网桥过滤2.9 安装 IPVS 3…...

完美解决html2canvas + jsPDF导出pdf分页内容截断问题
代码地址:https://github.com/HFQ12333/export-pdf.git html2canvas jspdf方案是前端实现页面打印的一种常用方案,但是在实践过程中,遇到的最大问题就是分页截断的问题:当页面元素超过一页A4纸的时候,连续的页面就会…...

14 地址映射
14 地址映射 1、地址划分2、相关函数2.1 ioremap/iounmap2.2 mmap地址映射 3、总结 1、地址划分 明确:在linux系统中,不管是应用程序还是驱动程序,都不允许直接访问外设的物理地址,要想访问必须将物理地址映射到用户虚拟地址或者内核虚拟地址࿰…...