使用docker-compose安裝ELK(elasticsearch,logstash,kibana)并簡單使用

首先服務器上需要安裝docker已經docker-compose,如果沒有,可以參考我之前寫的文章進行安裝。

https://blog.csdn.net/a_lllk/article/details/143382884?spm=1001.2014.3001.5502

1.下載并啟動elk容器

先創建一個網關,讓所有的容器共用此網關,方便容器之間互相通信。

docker network create elk-net

編寫docker-compose.yml,我這里的docker-compose版本是2.8.0,可以根據自己安裝的docker-compose去調整version。ELK的版本都使用的事8.6.2。

version: '2.8'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.6.2restart: alwayscontainer_name: esenvironment:- "ES_JAVA_OPTS=-Xms256m -Xmx512m"- "discovery.type=single-node"- "ELASTIC_USERNAME=elastic"- "ELASTIC_PASSWORD=elastic"- "ingest.geoip.downloader.enabled=false"- "xpack.security.transport.ssl.enabled=false"- "xpack.security.http.ssl.enabled=false"- "xpack.security.enabled=true"- "bootstrap.memory_lock=true"- "cluster.name=es-cluster"ports:- "9200:9200"- "9300:9300"privileged: truenetworks:- elk-netlogstash:image: docker.io/logstash:8.6.2container_name: logstashenvironment:- "LS_JAVA_OPTS=-Xmx256m -Xms256m"ports:- "5044:5044"  # Beats通信- "9600:9600"  # API通信networks:- elk-netrestart: alwaysprivileged: truekibana:image: docker.elastic.co/kibana/kibana:8.6.2container_name: kibanaenvironment:- "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"- "SERVER_NAME=kibana"- "XPACK_SECURITY_ENABLED=true"ports:- "5601:5601"networks:- elk-netrestart: alwaysprivileged: truenetworks:elk-net:driver: bridge

將文件放入服務器的任意目錄,然后輸入以下命令運行。

docker-compose up -d

稍等一會,等鏡像下載并創建容器,我這里因為早就下載好了鏡像,所以就直接創建了容器。

可以使用docker ps -a查看容器的創建情況,我的容器創建如下圖

可以使用ip+端口的形式去查看運行容器的情況,這里注意如果是服務器的話記得打開對于端口。

elasticsearch使用ip+:9200端口去訪問

kibana使用ip+:5601去訪問。這里注意,如果頁面顯示"Kibana server is not ready yet."是正常情況,因為目前并沒有對elasticsearch做任何配置,kibana是沒有檢測到es的存在。

logstash暫時沒有驗證的方式,只要看容器的啟動狀態是up就行了。

2.配置ELK

2.1.配置elasticsearch

首先在服務器目錄創建一個文件夾,來存放容器中的數據。

mkdir -p /usr/local/docker/elasticsearch

然后將容器中的配置文件及data,logs目錄復制到當前宿主機指定目錄下。

docker cp es:/usr/share/elasticsearch/config /usr/local/docker/elasticsearch/config
docker cp es:/usr/share/elasticsearch/data /usr/local/docker/elasticsearch/data
docker cp es:/usr/share/elasticsearch/logs /usr/local/docker/elasticsearch/logs

進入config目錄,有一個elasticsearch.yml文件,這個就是容器的配置文件。

我一般為了保險起見,都會先復制一個沒有修改過的配置文件,避免修改配置文件出錯時,容器啟動報錯。

cp elasticsearch.yml  elasticsearch-backup.yml

然后修改配置文件,內容如下:

vim elasticsearch.yml

cluster.name: "es-cluster"
network.host: 0.0.0.0node.name: node-01
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/logs
http.port: 9200
discovery.type: single-node
xpack.security.enabled: true
bootstrap.memory_lock: true

保存并退出,es的配置文件就編輯好了。

2.配置kibana

同樣創建一個文件夾,來存放容器中的數據。

mkdir -p /usr/local/docker/kibana

將需要的文件復制到宿主機中。

docker cp kibana:/usr/share/kibana/config /usr/local/docker/kibana/docker cp kibana:/usr/share/kibana/data /usr/local/docker/kibana/docker cp kibana:/usr/share/kibana/logs /usr/local/docker/kibana/

進入config目錄,編輯名為kibana.yml的配置文件。

vim kibana.yml

配置文件內容如下

#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
elasticsearch.username: "elastic"
elasticsearch.password: "elastic"
monitoring.ui.container.elasticsearch.enabled: true
#界面漢化
i18n.locale: "zh-CN"
##啟用或禁用 Kibana 報告功能的角色管理
xpack.reporting.roles.enabled: false

保存并退出,kibana配置文件就算改好了。

3.配置logstash

創建文件夾

mkdir -p /usr/local/docker/kibana

從容器中復制文件夾

docker cp logstash:/usr/share/logstash/pipeline/  /usr/local/docker/logstash/

進入/logstash/pipeline,編輯logstash.conf

input {beats {port => 5044}
}output {elasticsearch {hosts => ["http://elasticsearch:9200"]user => "elastic"password => "elastic"index => "logs-%{+YYYY.MM.dd}"}
}

3.重新創建容器

上面就對所有容器的配置文件做了處理,然后因為第一次啟動的時候沒有掛載目錄,所以更改的配置配置文件也不會生效,所以我們就需要重新創建一下容器,并將所有編輯的配置文件掛載到容器中去

首先對所有容器進行移除

docker stop es logstash kibana
docker rm es logstash kibana

然后重新編輯上面的docker-compose.yml,將宿主機中的目錄掛載到容器中。

version: '2.8'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.6.2restart: alwayscontainer_name: esvolumes:- /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data  - /usr/local/docker/elasticsearch/logs:/usr/share/elasticsearch/logs  - /usr/local/docker/elasticsearch/config:/usr/share/elasticsearch/config    environment:- "ES_JAVA_OPTS=-Xms256m -Xmx512m"- "discovery.type=single-node"- "ELASTIC_USERNAME=elastic"- "ELASTIC_PASSWORD=elastic"- "ingest.geoip.downloader.enabled=false"- "xpack.security.transport.ssl.enabled=false"- "xpack.security.http.ssl.enabled=false"- "xpack.security.enabled=true"- "bootstrap.memory_lock=true"- "cluster.name=es-cluster"ports:- "9200:9200"- "9300:9300"privileged: truenetworks:- elk-netlogstash:image: docker.io/logstash:8.6.2container_name: logstashenvironment:- "LS_JAVA_OPTS=-Xmx256m -Xms256m"volumes:- /usr/local/docker/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw  # Logstash配置ports:- "5044:5044"  # Beats通信- "9600:9600"  # API通信networks:- elk-netrestart: alwaysprivileged: truekibana:image: docker.elastic.co/kibana/kibana:8.6.2container_name: kibanaenvironment:- "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"- "SERVER_NAME=kibana"- "XPACK_SECURITY_ENABLED=true"volumes:- /usr/local/docker/kibana/logs:/usr/share/kibana/logs  - /usr/local/docker/kibana/data:/usr/share/kibana/data- /usr/local/docker/kibana/config:/usr/share/kibana/config ports:- "5601:5601"networks:- elk-netrestart: alwaysprivileged: truenetworks:elk-net:driver: bridge

運行命令,還是生成了三個容器。使用上面的ip+端口的方式去驗證,發現es可以訪問,但是kibana一直在嘗試重啟,說明配置文件存在問題。

使用log命令查看kibana的啟動日志,

docker logs -f kibana

發現es報錯了,報錯信息如下

"Error: [config validation of [elasticsearch].username]: value of "elastic" is forbidden. This is a superuser account that cannot write to system indices that Kibana needs to function. Use a service account token instead. Learn more: https://www.elastic.co/guide/en/elasticsearch/reference/8.0/service-accounts.html"

這里大概意思就是elastic作為超級賬號,是不能在kibana中直接使用,這里推薦使用賬戶token的方式去連接es。所以這里需要使用token的方式去連接es。

先進入到es的容器之中,然后運行一下命令,生成對應的token令牌。

進入容器:

docker exec -it es /bin/bash

運行生成令牌命令:

bin/elasticsearch-service-tokens create elastic/kibana default

復制等號后面的token信息

exit;退出容器,然后進入kibana的配置文件存放位置

cd usr/local/docker/kibana/config/

編輯kibana.yml,內容如下:

將之前配置的用戶名和密碼注釋或刪除,然后新增elasticsearch.serviceAccountToken,內容為剛才容器中返回的token信息。

然后wq!保存,重啟kibana

docker restart kibana

然后使用ip+:5601的方式訪問kibana,發現已經可以正常登錄使用了,也就是kibana已經成功連接了es。

4.在SpringBoot項目中簡單使用

elk的使用方式有很多種,這里簡單演示一下整合springBoot。

先創建一個springBoot項目,并導入以下jar包

        <!-- Logback Classic --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency><!-- Logstash Logback Encoder --><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.3</version></dependency>

然后在application.properties同級目錄,新建一個文件,文件名就是"logback-spring.xml"

然后xml內容如下。

<?xml version="1.0" encoding="UTF-8"?>
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern></encoder></appender><!-- 控制臺輸出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.classic.PatternLayout"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}.%M.%L) - %highlight(%msg)%n</pattern></layout></appender><!-- logback 輸出 --><appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>60.204.148.130:5044</destination><encoder class="net.logstash.logback.encoder.LogstashEncoder"><includeCallerData>true</includeCallerData><timeZone>UTC</timeZone><customFields>{"server_name":"demo-server"}</customFields></encoder></appender><root level="DEBUG"><!-- 將日志發送到Logstash --><appender-ref ref="STDOUT"/><appender-ref ref="STASH"/></root>
</configuration>

然后直接啟動springBoot項目,我這邊為了演示,level使用的是debug模式,如果覺得debug模式記錄太多的話,可以將xml最下面的root level值改為info.

然后訪問kibana主頁,點擊右側management下面的Stack Management。

進入Stack Management后,選擇右邊的索引管理。

這里已經成功根據配置文件,新建了一個記錄springBoot項目運行日志的索引。

然后可以點擊右側Management下的開發工具。

在左邊控制臺中輸入下面命令,去查看日志的記錄清空。

GET /logs-2025.01.16/_search // _search
{"sort": [{"@timestamp": {"order": "desc"}}], "query": {"match_all": {}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66500.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二十四、NetworkPolicy

NetworkPolicy 一、基礎網路 Kubernetes網絡模型設計的一個基礎原則是:每個Pod都擁有一個獨立的IP地址,并假定所有Pod都在一個可以直接連通的、扁平的網絡空間中。所以不管它們是否運行在同一個Node(宿主機)中,都要求它們可以直接通過對方的IP進行訪問。設計這個原則的原…

Python Web應用開發入門:從零搭建一個簡單的Web應用

引言 在當今的互聯網時代,Web應用已經成為我們日常生活中不可或缺的一部分。無論是社交媒體、電子商務,還是在線教育,Web應用都在背后發揮著重要作用。Python作為一種簡潔、強大的編程語言,在Web開發領域也有著廣泛的應用。本文將帶你從零開始,使用Python搭建一個簡單的W…

Java操作Excel導入導出——POI、Hutool、EasyExcel

目錄 一、POI導入導出 1.數據庫導出為Excel文件 2.將Excel文件導入到數據庫中 二、Hutool導入導出 1.數據庫導出為Excel文件——屬性名是列名 2.數據庫導出為Excel文件——列名起別名 3.從Excel文件導入數據到數據庫——屬性名是列名 4.從Excel文件導入數據到數據庫…

下載文件,瀏覽器阻止不安全下載

背景&#xff1a; 在項目開發中&#xff0c;遇到需要下載文件的情況&#xff0c;文件類型可能是圖片、excell表、pdf、zip等文件類型&#xff0c;但瀏覽器會阻止不安全的下載鏈接。 效果展示&#xff1a; 下載文件的兩種方式&#xff1a; 一、根據接口的相對url&#xff0c;拼…

第15章:Python TDD應對貨幣類開發變化(二)

寫在前面 這本書是我們老板推薦過的&#xff0c;我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后&#xff0c;我突然思考&#xff0c;對于測試開發工程師來說&#xff0c;什么才更有價值呢&#xff1f;如何讓 AI 工具更好地輔助自己寫代碼&#xff0c;或許…

CSS 動畫相關屬性

定義和用法 一些 CSS 屬性可用于動畫制作&#xff0c;這意味著它們可用于過渡等效果中。 可設置動畫的屬性可以從一個值逐漸更改為另一個值&#xff0c;例如尺寸、數字、百分比和顏色。 瀏覽器支持 表格中的數字注明了完全支持 CSS 動畫的首個瀏覽器版本。 -webkit-、-moz…

SD/MMC驅動開發

一、介紹 MMC的全稱是”MultiMediaCard”――所以也通常被叫做”多媒體卡”&#xff0c;是一種小巧大容量的快閃存儲卡,特別應用于移動電話和數字影像及其他移動終端中。MMC存貯卡只有7pin&#xff0c;可以支持MMC和SPI兩種工作模式。 SD卡&#xff0c;數字安全記憶卡&#xf…

Elasticsearch:Jira 連接器教程第一部分

作者&#xff1a;來自 Elastic Gustavo Llermaly 將我們的 Jira 內容索引到 Elaasticsearch 中以創建統一的數據源并使用文檔級別安全性進行搜索。 在本文中&#xff0c;我們將回顧 Elastic Jira 原生連接器的一個用例。我們將使用一個模擬項目&#xff0c;其中一家銀行正在開發…

《探索煙霧目標檢測開源項目:技術與應用的深度剖析》

一、引言 在現代社會&#xff0c;火災猶如高懸的達摩克利斯之劍&#xff0c;時刻威脅著人們的生命財產安全。煙霧&#xff0c;作為火災發生的重要征兆&#xff0c;其及時、準確的檢測對于火災預防和控制起著舉足輕重的作用。煙霧目標檢測技術猶如敏銳的 “電子哨兵”&#xff…

Linux操作系統的靈魂,深度解析MMU內存管理

在計算機的奇妙世界里&#xff0c;我們每天使用的操作系統看似流暢自如地運行著各類程序&#xff0c;背后實則有著一位默默耕耘的 “幕后英雄”—— 內存管理單元&#xff08;MMU&#xff09;。它雖不常被大眾所熟知&#xff0c;卻掌控著計算機內存的關鍵命脈&#xff0c;是保障…

3.2 OpenAI 語言模型總覽:GPT 系列的演進與應用解析

OpenAI 語言模型總覽:GPT 系列的演進與應用解析 OpenAI 的語言模型,特別是 GPT(Generative Pre-trained Transformer)系列,代表了當前自然語言處理(NLP)技術的前沿。自從推出以來,這些模型不斷推進了文本生成、理解和交互的能力,成為了多個應用場景中的核心技術。本文…

【云嵐到家】-day02-客戶管理-認證授權

第二章 客戶管理 1.認證模塊 1.1 需求分析 1.基礎概念 一般情況有用戶交互的項目都有認證授權功能&#xff0c;首先我們要搞清楚兩個概念&#xff1a;認證和授權 認證: 就是校驗用戶的身份是否合法&#xff0c;常見的認證方式有賬號密碼登錄、手機驗證碼登錄等 授權:則是該用…

Thinkphp8 Apidoc 實際使用中遇到的問題解決

1. 接口去掉 Controller 問題: 正確的路徑應該是/api/login/register, 這塊controller有沒有地方配置的? 2. 自定義成功,錯誤消息有沒有辦法? 未完成, 待更新

2024春秋杯密碼題第一、二天WP

你是小哈斯? 題目內容&#xff1a; 年輕黑客小符參加CTF大賽&#xff0c;他發現這個小哈斯文件的內容存在高度規律性&#xff0c;并且文件名中有隱藏信息&#xff0c;他成功找到了隱藏的信息&#xff0c;并破解了挑戰。得意地說&#xff1a;“成功在于探索與質疑&#xff0c…

opencv對直方圖的計算和繪制

【歡迎關注編碼小哥&#xff0c;學習更多實用的編程方法和技巧】 1、直方圖的計算 cv::calcHist 是 OpenCV 中用于計算圖像直方圖的函數。它可以處理多通道圖像&#xff0c;并通過指定圖像、通道、掩膜、直方圖大小和范圍等參數來生成直方圖。 函數原型 void cv::calcHist(…

C++的auto_ptr智能指針:從誕生到被棄用的歷程

C作為一種功能強大的編程語言&#xff0c;為開發者提供了眾多便捷的特性和工具&#xff0c;其中智能指針是其重要特性之一。智能指針能夠自動管理內存&#xff0c;有效避免內存泄漏等常見問題。然而&#xff0c;并非所有智能指針都盡善盡美&#xff0c;auto_ptr便是其中的一個例…

游戲開發中常用的設計模式

目錄 前言一、工廠模式二、單例模式三、觀察者模式觀察者模式的優勢 四、狀態模式狀態模式的優勢 五、策略模式策略模式的優勢策略模式與狀態模式有什么區別呢? 六、組合模式七、命令模式八、裝飾器模式 前言 本文介紹了游戲開發中常用的設計模式&#xff0c;如工廠模式用于創…

C++并發編程之異常安全性增強

在并發編程中&#xff0c;異常安全是一個非常重要的方面&#xff0c;因為并發環境下的錯誤處理比單線程環境更加復雜。當多個線程同時執行時&#xff0c;異常不僅可能影響當前線程&#xff0c;還可能影響其他線程和整個程序的穩定性。以下是一些增強并發程序異常安全性的方法&a…

各語言鏡像配置匯總

鏡像配置匯總 Nodejs [ npm ]Python [ pip ] Nodejs [ npm ] // # 記錄日期&#xff1a;2025-01-20// 查詢當前使用的鏡像 npm get registry// 設置淘寶鏡像 npm config set registry https://registry.npmmirror.com/// 恢復為官方鏡像 npm config set registry https://regi…

Navicat Premium 數據可視化

工作區&#xff0c;數據源以及圖表 數據可視化是使用可視化組件&#xff08;例如圖表&#xff0c;圖形和地圖&#xff09;的信息和數據的圖形表示。 數據可視化工具提供了一種可訪問的方式&#xff0c;用于查看和理解數據中的趨勢&#xff0c;異常值和其他模式。 在Navicat中&…