ELK 使用教程采集系統日志

作者:小凱
沉淀、分享、成長,讓自己和他人都能有所收獲!

本文的宗旨在于通過易于上手實操的方式,教會讀者完成系統ELK日志采集的對接和使用。那你知道對于一個系統的上線考察,必備的幾樣東西是什么嗎?其實這也是面試中考察求職者,是否真的做過系統開發和上線的必備問題。包括:服務治理(熔斷/限流) (opens new window)、監控 (opens new window)和日志,如果你做的系統里沒有這樣幾個東西,一種是說明系統是玩具項目,另外一種就是壓根沒做過或者沒關心過。前面的已經寫完了,所以今天來給大家寫ELK日志。

官網:https://www.elastic.co/cn/(opens new window)

一、簡要說明
Elastic Stack 技術棧,別是 Elasticsearch、Logstash、Kibana 組成,簡稱 ELK 是一套針對日志數據做解決方案的框架。它使您能夠聚合來自所有系統和應用程序的日志,分析這些日志,并創建可視化來進行應用程序和基礎設施監控、更快的故障排除、安全分析等。

  • E = Elasticsearch:Elasticsearch 是在 Apache Lucene 上構建的分布式搜索和分析引擎。對各種語言、高性能和無架構 JSON 文檔的支持使 Elasticsearch 成為各種日志分析和搜索使用案例的理想選擇。
  • L = Logstash:Logstash 是一個開源數據攝取工具,允許您從各種來源收集數據,轉換數據,并將數據發送到您希望的目標。通過預構建的篩選器和對 200 多種插件的支持,Logstash 使用戶能夠輕松攝取數據,無論數據源或類型如何。
  • K = Kibana:Kibana 是一種數據可視化和挖掘工具,可以用于日志和時間序列分析、應用程序監控和運營智能使用案例。它提供了強大且易用的功能,例如直方圖、線形圖、餅圖、熱圖和內置的地理空間支持。此外,付費的 Kibana 還有 x-pack-jdbc 可以使用,讓你就像使用 MyBatis 操作 MySQL 數據庫一樣操作 Elasticsearch 數據。

綜上,3個組件的組合使用。由 Logstash 將攝取、轉換數據并將其發送到 Elasticsearch 為攝取的數據編制索引,并且分析和搜索這些數據。最終 Kibana 會將分析結果可視化。也就是你可以在 Kibana 上實時看到系統的運行日志。

二、環境配置
這里做了個工程案例,并配有對應的環境安裝、日志上報,你只需要跟隨接下來的文章說明,即可知道 ELK 如何配置和使用。
在這里插入圖片描述

  • 環境;jdk 1.8、Maven 3.6.x、Docker
  • 組件;ELK version 7.17.14 支持 ARM&AMD
  • 代碼;在 xfg-dev-tech-elk 測試工程中提供了測試代碼和環境安裝,綠色按鈕點擊即可安裝【確保你已經本地安裝了 Docker】

1. 環境配置
在這里插入圖片描述

  • docker-compose.yml 運行時會加載下面的 kibana、logstash 配置信息。
  • kibana.yml 設置了資源的基本信息,包括 ES 的連接,中文漢化。
  • logstash.conf 設置了日志的格式,上報到 es:9200 的地址信息。這些都可以保持默認不用修改。

2. 安裝環境

version: '3'
# 執行腳本;docker-compose -f docker-compose.yml up -d
# 控制臺;GET _cat/indices - 查看 springboot-logstash- 是否存在,上報后存在,則表示接入成功
services:elasticsearch:image: elasticsearch:7.17.14ports:- '9200:9200'- '9300:9300'container_name: elasticsearchrestart: alwaysenvironment:- 'cluster.name=elasticsearch' # 設置集群名稱為elasticsearch- 'discovery.type=single-node' # 以單一節點模式啟動- "cluster.name=docker-cluster" # 設置名稱- 'ES_JAVA_OPTS=-Xms512m -Xmx512m' # 設置使用jvm內存大小networks:- elklogstash:image: logstash:7.17.14container_name: logstashrestart: alwaysvolumes:- /etc/localtime:/etc/localtime- ./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.confports:- '4560:4560'- '50000:50000/tcp'- '50000:50000/udp'- '9600:9600'environment:LS_JAVA_OPTS: -Xms1024m -Xmx1024mTZ: Asia/ShanghaiMONITORING_ENABLED: falselinks:- elasticsearch:es # 可以用es這個域名訪問elasticsearch服務networks:- elkdepends_on:- elasticsearch # 依賴elasticsearch啟動后在啟動logstashkibana:image: kibana:7.17.14container_name: kibanarestart: alwaysvolumes:- /etc/localtime:/etc/localtime- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.ymlports:- '5601:5601'links:- elasticsearch:es #可以用es這個域名訪問elasticsearch服務environment:- ELASTICSEARCH_URL=http://elasticsearch:9200 #設置訪問elasticsearch的地址- 'elasticsearch.hosts=http://es:9200' #設置訪問elasticsearch的地址- I18N_LOCALE=zh-CNnetworks:- elkdepends_on:- elasticsearchnetworks:elk:driver: bridge #網絡

在這里插入圖片描述

  • 這是 docker compose 執行腳本,如果你本地已經安裝了 Docker 可以直接執行 安裝即可。
  • 安裝完成后,當你看到如上截圖,則表示已經運行。注意 Quick Actions 下可以進入日志和控制臺。如果啟動失敗,可以檢查日志。

3. 日志配置
3.1 引入POM - logstash

<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.3</version>
</dependency>
  • 這個Jar是為了上報應用日志用的。工程的根目錄下引入是定義版本,在 xfg-dev-tech-app 模塊下引入是具體的引入。

3.2 logback 采集

# logstash部署的服務器IP
logstash:host: 127.0.0.1@小傅哥: 代碼已經復制到剪貼板<springProperty name="LOG_STASH_HOST" scope="context" source="logstash.host" defaultValue="127.0.0.1"/><!--輸出到logstash的appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--可以訪問的logstash日志收集端口--><destination>${LOG_STASH_HOST}:4560</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender><root level="info"><appender-ref ref="LOGSTASH"/>
</root>
  • LOG_STASH_HOST 通過占位符可以使用 yml 配置,這樣方便后期動態調整。

四、應用測試
1. 啟動應用&檢測上報

public class Application {public static void main(String[] args) {SpringApplication.run(Application.class);}/*** curl http://localhost:8091/api/ratelimiter/login?fingerprint=uljpplllll01009&uId=1000&token=8790*/@RequestMapping(value = "login", method = RequestMethod.GET)public String login(String fingerprint, String uId, String token) {log.info("模擬登錄 login fingerprint:{}", fingerprint);return "模擬登錄:登錄成功 " + uId;}}

在這里插入圖片描述

  • 地址:http://0.0.0.0:5601/app/dev_tools#/console(opens new window)
  • 命令:GET _cat/indices - 通過命令檢測日志上報

2. 配置日志
地址:http://0.0.0.0:5601/app/discover(opens new window)

2.1 創建索引
在這里插入圖片描述
在這里插入圖片描述

  • 當你的應用啟動后,會上報數據。這個時候在點擊 Discover 會提示你有可用的數據。
  • 如圖創建索引即可。

2.2 回到監控
創建索引后,回到 Discover 即可查看監控日志。在這個階段,你可以訪問應用程序接口,查看上報日志信息;http://localhost:8091/api/ratelimiter/login?fingerprint=uljpplllll01009&uId=1000&token=8790(opens new window)

在這里插入圖片描述

  • 當你不斷的訪問接口,就可以看到上報的日志數據信息了。

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

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

相關文章

小程序部分pai

wx.setClipboardData 這是微信小程序提供的 API&#xff0c;用于將數據復制到剪貼板。 Page({data: {clientInfo: {email: exampleexample.com // 假設的郵箱數據}},// 復制郵箱到剪貼板copyEmail: function() {wx.setClipboardData({data: this.data.clientInfo.email,success…

【解決方案】鴻蒙 / 礦鴻系統 Shell 無故退出問題(息屏導致)詳解

平臺環境 OpenHarmony 版本&#xff1a;4.1 release開發板&#xff1a;DAYU / RK3568調試工具&#xff1a;hdc 在使用 OpenHarmony 4.1 Release&#xff08;礦鴻系統&#xff09;進行開發時&#xff0c;遇到這樣的問題&#xff1a; &#x1f6a8; Shell 會在一段時間后自動退出…

Data Analysis TTAD=>CNN-BiGRU-MSA

TTAO 預處理、CNN-BiGRU-MSA 模型 時序數據回歸分析時序數據分析方法&#xff0c;特點&#xff1a;TTAO 預處理&#xff1a;通過三角拓撲結構增強時序特征的局部和全局關系混合模型架構&#xff1a;CNN 層提取局部特征模式BiGRU 捕獲雙向時序依賴多頭自注意力機制進行序列建模…

python-字典、集合、序列切片、字符串操作(筆記)

一、字符串常見操作&#xff08;重點&#xff09;?1.?2.字符串無法修改#錯誤示范 str1"djskds" str1[2]"3"3.?str1"abcand" # 輸出3 print(str1.index("and"))4.?str1"abcand" newStrstr1.replace("and",&quo…

【Android】EditText使用和監聽

三三想成為安卓糕手 一&#xff1a;用戶登錄校驗 1&#xff1a;EditText文本輸入框<EditTextandroid:id"id/et_user_name"android:layout_width"match_parent"android:layout_height"wrap_content"android:inputType"number"androi…

SQL 中根據當前時間動態計算日期范圍

在 SQL 中寫“動態時間”通常是指根據當前時間動態計算日期范圍&#xff0c;而不是寫死固定日期。以下是幾種常見寫法&#xff08;以 SQL Server / MySQL / PostgreSQL 為例&#xff09;&#xff1a;1. 獲取當前時間-- SQL Server SELECT GETDATE() AS now-- MySQL SELECT NOW(…

react-redux 類組件的 connect

store 目錄下 store/reducer.js import * as actionTypes from ./constantsconst initalState {counter: 100,banners: [],recommends: [] }/*** 定義reducer函數&#xff1a;純函數* param 參數一&#xff1a;store中目前保存的state* param 參數二&#xff1a;通過 dispatch…

數據分布是如何影響目標檢測精度

文章目錄一、研究背景與目標模型效果提升數據集優化二、研究問題明細各方向的關聯性與核心邏輯1. 高質量數據集的高效篩選與主動學習應用2. 基于推理結果的數據補充與增強方向優化3. 多類別場景下目標尺度與模型精度的關聯性4. 損失函數與數據增強對精度的量化影響5. 目標類型專…

高效批量轉換Java接口為MCP服務:降低重復勞動的實戰指南

高效批量轉換Java接口為MCP服務:降低重復勞動的實戰指南 在AI大模型技術飛速發展的今天,企業需要將現有Java接口快速適配為模型計算協議(MCP,Model Calculation Protocol)服務,以便與大模型生態無縫對接。然而,手動逐個轉換接口不僅耗時耗力,還容易因人為疏忽導致錯誤…

Eclipse Debug 配置指南

Eclipse Debug 配置指南 引言 Eclipse 作為一款功能強大的集成開發環境(IDE),在Java開發者中享有盛譽。在開發過程中,調試功能是必不可少的。本文將詳細介紹如何在Eclipse中配置調試環境,以便更高效地進行代碼調試。 1. 開發環境準備 在開始配置Eclipse調試環境之前,…

modelscope ProxyError: HTTPSConnectionPool(host=‘www.modelscope.cn‘, port=443)

目錄 Windows CMD&#xff1a; powershell Linux / macOS / Git Bash&#xff1a; win11 設置全局系統變量代理 modelscope ProxyError: HTTPSConnectionPool(hostwww.modelscope.cn, port443) 報錯&#xff1a; requests.exceptions.ProxyError: HTTPSConnectionPool(host…

Python學習之——序列化與反序列化

Python學習之——序列化與反序列化yaml & json & xmlyamljsonPython自帶Json庫xml一個綜合示例pickle & msgpack & marshalpicklemsgpackmarshal自定義導出py文件一個導出py文件的示例yaml & json & xml YAML & JSON &XML 如何選擇 yaml Py…

設計模式之代理模式:掌控對象訪問的優雅之道

代理模式&#xff1a;掌控對象訪問的優雅之道 引言&#xff1a;設計模式的重要性 在軟件開發中&#xff0c;設計模式是解決常見問題的可復用方案&#xff0c;它們如同建筑師的藍圖&#xff0c;為開發者提供了經過驗證的最佳實踐。在23種經典設計模式中&#xff0c;代理模式因其…

sqli-labs靶場通關筆記:第18-19關 HTTP頭部注入

第18關 User-Agent注入登錄正確的用戶名密碼&#xff0c;它會將User-Agent的信息回顯到頁面上。猜測UA頭可能存在注入點。利用bp抓包&#xff0c;在UA頭后面加一個單引號&#xff0c;發現報錯了。觀察報錯信息&#xff0c;顯示nearxx,admin)&#xff0c;推測后面應該還有兩個參…

基于按鍵開源MultiButton框架深入理解代碼框架(三)(指針的深入理解與應用)

文章目錄3、分析代碼3.3 按鍵的插入3.4 按鍵的刪除3.5 繼續分析狀態機核心理解4、寫在最后的總結5、思想感悟篇6、慈悲不渡自絕人3、分析代碼 3.3 按鍵的插入 // Button handle list headstatic Button* head_handle NULL;/*** brief Start the button work, add the handle…

ACOUSLIC-AI挑戰報告:基于低收入國家盲掃超聲數據的胎兒腹圍測量|文獻速遞-醫學影像算法文獻分享

Title題目ACOUSLIC-AI challenge report: Fetal abdominal circumferencemeasurement on blind-sweep ultrasound data from low-income countriesACOUSLIC-AI挑戰報告&#xff1a;基于低收入國家盲掃超聲數據的胎兒腹圍測量01文獻速遞介紹胎兒生長受限&#xff08;FGR&#xf…

集群聊天服務器各個類進行詳解

1.dh.h類定義概要類名&#xff1a; MySQL功能&#xff1a; 簡化MySQL的連接、查詢和更新操作&#xff0c;提供接口給上層應用使用。成員變量private:MYSQL *_conn;_conn&#xff1a;指向MYSQL結構體的指針&#xff0c;用于代表數據庫連接實例。由mysql_init()初始化&#xff0c…

電纜安全雙保險:不止防盜,更能防觸電的塔能智慧照明守護方案

城市照明、地下車庫以及園區路燈所涉及的電纜安全問題&#xff0c;向來都是運維管理方面頗為棘手的難題。在傳統的運維管理模式之下&#xff0c;電纜一旦被盜&#xff0c;那么所造成的影響可不小&#xff0c;一方面會帶來直接的經濟損失&#xff0c;另一方面還極有可能因為線路…

Leetcode刷題營第二十九,三十題:二叉樹的中序以及后序遍歷

94.二叉樹的中序遍歷 給定一個二叉樹的根節點 root &#xff0c;返回 它的 中序 遍歷 。 示例 1&#xff1a; 輸入&#xff1a;root [1,null,2,3] 輸出&#xff1a;[1,3,2]示例 2&#xff1a; 輸入&#xff1a;root [] 輸出&#xff1a;[]示例 3&#xff1a; 輸入&#x…

Rabbitmq Direct Exchange(直連交換機)可以保證消費不被重復消費嗎,可以多個消費者,但是需要保證同一個消息,不會被投遞給多個消費者

在 RabbitMQ 中&#xff0c;默認情況下&#xff0c;不能保證消息不被重復消費&#xff0c;但可以通過 隊列綁定方式 消費者競爭機制 來確保 同一消息只被一個消費者處理。以下是幾種可行的方案&#xff1a;方案 1&#xff1a;單隊列 競爭消費者模式&#xff08;默認行為&…