Docker容器搭建ELK日志分析系统

Docker容器搭建ELK日志分析系统

文章目录

  • Docker容器搭建ELK日志分析系统
    • 资源列表
    • 基础环境
    • 一、创建容器网络
    • 二、创建容器挂载目录
    • 三、构建systemctl镜像
    • 三、构建Elasticsearch镜像
      • 3.1、构建Elasticsearch
      • 3.2、构建镜像
      • 3.3、启动容器
      • 3.4、进入容器
      • 3.5、查看节点信息
    • 四、构建Logstash镜像
      • 4.1、构建Logstash镜像
      • 4.2、构建镜像
      • 4.3、启动容器
      • 4.4、进入容器收集日志
        • 4.4.1、安装Apache
        • 4.4.2、收集Apache日志
    • 五、构建Kibana镜像
      • 5.1、构建Kibana镜像
      • 5.2、构建镜像
      • 5.3、启动容器
      • 5.4、进入容器
      • 5.5、验证Kibana

资源列表

操作系统配置主机名IP所需软件
CentOS 7.92C4Gelk192.168.93.165Docker 26.1.2

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
  • 修改主机名
hostnamectl set-hostname elk

一、创建容器网络

[root@elk ~]# docker network create elk
44c014de1c02291f28ebcdc734e4bfb820e2a1e2aa61b2758517af60661ee4d7
[root@elk ~]# docker network list | grep elk
44c014de1c02   elk       bridge    local

二、创建容器挂载目录

[root@elk ~]# mkdir -p /mnt/{elasticsearch,logstash,kibana}

三、构建systemctl镜像

  • 目的:为了更改管理容器中的ELK服务
# 创建工作目录
[root@elk ~]# mkdir systemctl
[root@elk ~]# cd systemctl/
[root@elk systemctl]# cat Dockerfile 
# 指定基础镜像
FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*; \
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*; \
rm -f /lib/systemd/system/anaconda.target.wants/*;
# 在容器创建一个挂载点,这个挂载点将会跟宿主机或者别的容器交互
VOLUME ["/sys/fs/cgroup"]# 构建镜像
[root@elk systemctl]# docker build -t systemctl:elk .

三、构建Elasticsearch镜像

  • 存储日志数据

3.1、构建Elasticsearch

# 创建ELK工作目录
[root@elk ~]# mkdir elk
[root@elk ~]# cd elk/
# 创建工作目录
[root@elk elk]# mkdir elasticsearch
[root@elk elk]# cd elasticsearch/
[root@elk elasticsearch]# cat Dockerfile 
# 指定基础镜像
FROM systemctl:elk
# 安装java环境
COPY jdk-8u202-linux-x64.rpm /root
RUN rpm -ivh /root/jdk-8u202-linux-x64.rpm
RUN echo "export JAVA_HOME=/usr/java/jdk1.8.0_202-amd64/" >> /etc/profile && echo "export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar" >> /etc/profile && echo "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profile
RUN source /etc/profile
# 安装elasticsearch
COPY elasticsearch-5.5.0.rpm /root
RUN rpm -ivh /root/elasticsearch-5.5.0.rpm
COPY elasticsearch.yml /etc/elasticsearch/
RUN mkdir -p /data/elk_data && chown -R elasticsearch:elasticsearch /data/elk_data/ && # ES配置文件
[root@elk elasticsearch]# grep -v "^#" elasticsearch.yml
cluster.name: es
node.name: ES1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["ES1"]

3.2、构建镜像

[root@elk elasticsearch]# ls
Dockerfile               elasticsearch.yml
elasticsearch-5.5.0.rpm  jdk-8u202-linux-x64.rpm
[root@elk elasticsearch]# docker build -t elasticsearch:latest .

3.3、启动容器

[root@elk elasticsearch]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 --network elk -v /mnt/elasticsearch:/mnt/elasticsearch --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro elasticsearch:latest /sbin/init

3.4、进入容器

[root@elk elasticsearch]# docker exec -it elasticsearch bash
[root@41f5c697c0c3 ~]# chown -R elasticsearch:elasticsearch elasticsearch.yml
[root@41f5c697c0c3 /]# systemctl start elasticsearch
[root@41f5c697c0c3 /]# systemctl enable elasticsearch
[root@41f5c697c0c3 /]# yum -y install net-tools
[root@41f5c697c0c3 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      168/java            
[root@41f5c697c0c3 ~]# netstat -anpt | grep 9300
tcp6       0      0 :::9300

3.5、查看节点信息

# 查看节点信息
[root@elk ~]# curl http://192.168.93.165:9200
{"name" : "ES1","cluster_name" : "es","cluster_uuid" : "qtJ4glpZQSuJFqU7zSOR1w","version" : {"number" : "5.5.0","build_hash" : "260387d","build_date" : "2017-06-30T23:16:05.735Z","build_snapshot" : false,"lucene_version" : "6.6.0"},"tagline" : "You Know, for Search"
}# 查看群集健康状况,status直为green,表示节点健康运行
[root@elk ~]# curl -XGET 'http://192.168.93.165:9200/_cluster/health?pretty'
{"cluster_name" : "es","status" : "green","timed_out" : false,"number_of_nodes" : 1,"number_of_data_nodes" : 1,"active_primary_shards" : 0,"active_shards" : 0,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0,"delayed_unassigned_shards" : 0,"number_of_pending_tasks" : 0,"number_of_in_flight_fetch" : 0,"task_max_waiting_in_queue_millis" : 0,"active_shards_percent_as_number" : 100.0
}

四、构建Logstash镜像

  • 收集日志、处理日志、输出日志(把处理好的日志输出给Elasticsearch)

4.1、构建Logstash镜像

[root@elk ~]# cd elk/
[root@elk elk]# mkdir logstash
[root@elk elk]# cd logstash/
[root@elk logstash]# cat Dockerfile 
FROM systemctl:elk
# 安装java环境
COPY jdk-8u202-linux-x64.rpm /root
RUN rpm -ivh /root/jdk-8u202-linux-x64.rpm && echo "export JAVA_HOME=/usr/java/jdk1.8.0_202-amd64/" >> /etc/profile && echo "export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar" >> /etc/profile && echo "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profile && source /etc/profile
# 安装logstash
COPY logstash-5.5.1.rpm /root/
RUN rpm -ivh /root/logstash-5.5.1.rpm && ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

4.2、构建镜像

[root@elk logstash]# ls
Dockerfile  jdk-8u202-linux-x64.rpm  logstash-5.5.1.rpm
[root@elk logstash]# docker build -t logstash .

4.3、启动容器

# 将/var/log/httpd目录挂载到容器中的/var/log/httpd中,等下会安装httpd服务,logstash会收集/var/log/httpd中的日志
[root@elk logstash]# docker run -d --network elk --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /mnt/logstash:/mnt/logstash -v /var/log/httpd:/var/log/httpd --name logstash logstash:latest /sbin/init
[root@ec3e7bdf85c2 ~]# systemctl start logstash
[root@ec3e7bdf85c2 ~]# systemctl enable logstash

4.4、进入容器收集日志

4.4.1、安装Apache
  • 在宿主机上安装Apache服务
[root@elk ~]# yum -y install httpd
[root@elk ~]# systemctl start httpd && systemctl enable httpd# 多访问几次,让httpd访问日志有内容
[root@elk ~]# curl 127.0.0.1
[root@elk ~]# curl 127.0.0.1
[root@elk ~]# curl 127.0.0.1
[root@elk ~]# curl 127.0.0.1# 查看日志内容
[root@elk ~]# cat /var/log/httpd/access_log 
127.0.0.1 - - [04/Jun/2024:05:17:37 -0400] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
127.0.0.1 - - [04/Jun/2024:05:17:37 -0400] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
127.0.0.1 - - [04/Jun/2024:05:17:37 -0400] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
127.0.0.1 - - [04/Jun/2024:05:17:38 -0400] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
127.0.0.1 - - [04/Jun/2024:05:17:38 -0400] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
127.0.0.1 - - [04/Jun/2024:05:17:38 -0400] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
127.0.0.1 - - [04/Jun/2024:05:17:39 -0400] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
4.4.2、收集Apache日志
  • 进入容器收集日志
[root@elk logstash]# docker exec -it logstash bash# 创建收集日志文件,将收集到的日志,输出给192.168.93.165:9200端口,也就是ES服务
[root@ec3e7bdf85c2 /]# cd /etc/logstash/conf.d/
[root@ec3e7bdf85c2 conf.d]# cat apache_log.conf 
input {file {# 收集Apache访问日志path => "/var/log/httpd/access_log"# 类型指定为accesstype => "access"# 从开始处收集start_position => "beginning"}file {# 收集Apache错误日志path => "/var/log/httpd/error_log"# 类型指定为errortype => "error"# 从开始处收集start_position => "beginning"}
}
output{# 如果类型为access,即Apache访问日志if [type] == "access" {# 输出到elasticsearchelasticsearch {# elasticsearch监听地址及端口hosts => ["192.168.93.165:9200"]# 指定索引格式index => "apache_access-%{+YYYY.MM.dd}"}}# 如果类型为error,即Apache错误日志if [type] == "error" {# 输出到elasticsearchelasticsearch {# elasticsearch监听地址及端口hosts => ["192.168.93.165:9200"]# 指定索引格式index => "apache_error-%{+YYYY.MM.dd}"}}
}# 开始收集日志,回显是前台运行的,输出之后ctrl+c终止即可
[root@ec3e7bdf85c2 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/apache_log.conf 
  • 查看是否在Elasticsearch中创建索引
# 索引创建成功,里面是apache的访问日志和错误日志内容
[root@elk ~]# curl -XGET "localhost:9200/_cat/indices?v"
health status index                    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   apache_error-2024.06.04  aMWtWv-OStmiKOvnUz2btQ   5   1         12            0     45.3kb         45.3kb
yellow open   apache_access-2024.06.04 9UaofAv1T5GPWyANz5D55w   5   1          7            0       28kb           28kb

五、构建Kibana镜像

  • 作用:以Web的方式展示日志

5.1、构建Kibana镜像

[root@elk ~]# cd elk/
[root@elk elk]# mkdir kibana
[root@elk elk]# cd kibana/
[root@elk kibana]# cat Dockerfile 
FROM systemctl:elk
# 安装java环境
COPY jdk-8u202-linux-x64.rpm /root
RUN rpm -ivh /root/jdk-8u202-linux-x64.rpm
RUN echo "export JAVA_HOME=/usr/java/jdk1.8.0_202-amd64/" >> /etc/profile && echo "export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar" >> /etc/profile && echo "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profile
RUN source /etc/profile
# 安装kibana
COPY kibana-5.5.1-x86_64.rpm /root
RUN rpm -ivh /root/kibana-5.5.1-x86_64.rpm
COPY kibana.yml /etc/kibana/
EXPOSE 5601[root@elk kibana]# grep -v "#" kibana.yml | grep -v "^?" | grep -v "^$"
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.93.165:9200"
kibana.index: ".kibana"

5.2、构建镜像

[root@elk kibana]# ls                                                        
Dockerfile  jdk-8u202-linux-x64.rpm  kibana-5.5.1-x86_64.rpm  kibana.yml
[root@elk kibana]# docker build -t kibana .

5.3、启动容器

[root@elk kibana]# docker run -d --name kibana -p 5601:5601 --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /mnt/kibana:/mnt/kibana kibana:latest /sbin/init

5.4、进入容器

[root@elk kibana]# docker exec -it kibana bash
[root@2db31a060306 /]# systemctl start kibana.service 
[root@2db31a060306 /]# yum -y install net-tools
[root@2db31a060306 /]# netstat -anpt | grep 5601
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      54/node  

5.5、验证Kibana

  • 通过浏览器访问http://192.168.93.165:5601,第一次登录需要添加一个Elasticsearch索引,添加前面两个Apache的
    在这里插入图片描述

在这里插入图片描述

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

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

相关文章

NLP基础——语言模型(动手学深度学习)

语言模型 联合概率 给定文本序列 x 1 , ⋯ , x t x_1,\cdots,x_t x1​,⋯,xt​,语言模型的目标是估计联合概率 P ( x 1 , ⋯ , x t ) P(x_1,\cdots,x_t) P(x1​,⋯,xt​). 这里的 x t x_t xt​ 可以认为是文本序列在时间步 t t t 处的观测或标签,而…

亚信安慧AntDB:卓越的拓展性和灵活性

在当今这个信息爆炸的时代,企业对数据处理的需求不断增长,传统的数据库系统往往难以应对海量数据的存储和处理挑战。然而,随着亚信安慧AntDB的出现,解决这一难题的曙光终于出现在眼前。AntDB不仅仅具备了高吞吐、高并发、高性能的…

Linux系统之mv命令的基本使用

Linux系统之mv命令的基本使用 一、mv命令介绍1. mv命令简介2. mv命令的使用结果 二、mv命令的使用帮助1. 在命令行的帮助信息2. mv常用选项 三、mv命令的基本使用1. 创建源目录和目标目录2. 新建测试文件3. 将源目录文件复制到目标目录4. 将文件进行改名5. 将目录的所有文件转移…

前端面试宝典总结4-手搓代码JavaScript(数据处理)

前端面试宝典总结4之手写代码JavaScript(数据处理) 本文章 对各大学习技术论坛知识点,进行总结、归纳自用学习,共勉🙏 上一篇👉: 前端面试宝典总结3-JavaScript(2) 文章目录 前端…

python长方形周长面积 2024年3月青少年编程电子学会python编程等级考试二级真题解析

目录 python长方形周长面积 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python长方形周长面积 2024年3月 python编程等级考试级编程题 一、…

matlab模拟太阳耀斑喷发

代码 function simulate_solar_flare% 参数设置gridSize 100; % 网格大小timeSteps 200; % 时间步数dt 0.1; % 时间步长% 初始化网格[X, Y] meshgrid(linspace(-5, 5, gridSize));Z zeros(size(X));% 设置耀斑初始位置和强度flareCenter [0, 0]; % 耀斑中心位置flareRad…

【实用技巧】Unity中的Image组件

Unity中的Image组件是UI系统的核心部分,用于显示图像和纹理。以下是一些关于Unity Image组件的实用技巧: 使用Sprite作为Image源: 将Sprite直接拖拽到Image组件的Source Image字段中,可以快速设置显示的图像。 调整颜色和透明度&a…

9 -力扣高频 SQL 50 题(基础版)

9 - 上升的温度 -- 找出与之前(昨天的)日期相比温度更高的所有日期的 id -- DATEDIFF(2007-12-31,2007-12-30); # 1 -- DATEDIFF(2010-12-30,2010-12-31); # -1select w1.id from Weather w1, Weather w2 wheredatediff(w1.recordDate,w2.recordDat…

SolidWorks功能强大的三维设计软件下载安装,SolidWorks最新资源获取!

SolidWorks,它凭借出色的三维建模能力,使得设计师们能够轻松构建出复杂且精细的机械模型,大大提升了设计效率和质量。 在机械设计领域,SolidWorks凭借其丰富的工具和特性,让设计师们能够随心所欲地挥洒创意。无论是零…

Flutter 中的 LayoutBuilder 小部件:全面指南

Flutter 中的 LayoutBuilder 小部件:全面指南 Flutter 是一个功能丰富的 UI 框架,它允许开发者使用 Dart 语言来构建高性能、美观的跨平台应用。在 Flutter 的布局系统中,LayoutBuilder 是一个强大的组件,它可以根据父容器的约束…

家政预约小程序12用户登录

目录 1 创建全局变量2 创建页面3 搭建页面4 实现登录逻辑总结 在小程序中,登录是一个常见的场景。比如我们在小程序预约或者购买时,通常要求用户先登录后购买。如果使用传统方案,登录这个动作其实最终的目的是为了获取用户的openid。而使用低…

Python学习圣经:从0到1,精通Python使用

尼恩:LLM大模型学习圣经PDF的起源 在40岁老架构师 尼恩的读者交流群(50)中,经常性的指导小伙伴们改造简历。 经过尼恩的改造之后,很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会&#x…

【智能体】文心智能体大赛第二季持续进行中,一起在智能体的海洋里发挥你的创意吧

目录 背景作文小助手AI迅哥问答程序员黄历助手比赛时间第二期赛题丰厚奖品评选说明获奖智能体推荐文章 背景 AI应用(智能体),持续火热,一句话就能创建一个有趣、好玩的应用。 可以说一分钟内就能创建一个有创意的智能体。 看大多…

Linux网络-自定义协议、序列化和反序列化、网络计算服务器的实现和Windows端客户端

文章目录 前言一、自定义协议传结构体对象 序列化和反序列化什么是序列化?反序列化 二、计算器服务端(线程池版本)1.main.cc2.Socket.hpp3.protocol.hpp4.Calculator.hpp5.serverCal.hpp6.threadPool.hpp7.Task.hpp8. log.hpp 客户端Windows客…

我有点想用JDK17了

大家好呀,我是summo,JDK版本升级的非常快,现在已经到JDK20了。JDK版本虽多,但应用最广泛的还得是JDK8,正所谓“他发任他发,我用Java8”。 其实我也不太想升级JDK版本,感觉投入高,收…

华为、华三交换机、路由器启用基于端口的环回检测功能配置

目的 在进行某些特殊功能测试时,例如初步定位以太网故障时,需要开启以太网接口环回检测功能,测试接口功能是否异常。 当以太网接口无故障时,开启环回检测功能后接口物理状态和协议状态将始终处于Up状态;如果以太网接口…

Linux环境搭建NextCloud

NextCloud是什么 Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷的搭建一套属于自己或者团队的云同步网盘,从而实现跨平台跨设备文件同步,共享,版本控制,团队协做等功能。它的客户端覆盖windows&#…

使用AdaBoost分类方法实现对Wine数据集分类

目录 1. 作者介绍2. 什么是AdaBoost?2.1 什么是弱分类器2.2 什么是强分类器2.3 如何自适应增强2.4 如何组合弱分类器成为一个强分类器? 3. 什么是Wine数据集3.1 Wine 数据集3.2 Wine 数据集结构 4. 使用AdaBoost分类方法实现对Wine数据集分类5. 完整代码…

PLC的编程方式有什么编程:深度探索与实用指南

PLC的编程方式有什么编程:深度探索与实用指南 在现代工业自动化领域,可编程逻辑控制器(PLC)扮演着至关重要的角色。PLC的编程方式多种多样,每种方式都有其独特的优点和适用场景。本文将从四个方面、五个方面、六个方面…

k8s 配置资源管理

一、Secret的资源配置 1.1 Secret配置的相关说明 Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 有四种类型&a…