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.pswp.cn/bicheng/22364.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22364.shtml
英文地址,請注明出處:http://en.pswp.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…