ELK實戰(最詳細)

一、什么是ELK

ELK是三個產品的簡稱:ElasticSearch(簡稱ES) 、Logstash Kibana 。其中:

  • ElasticSearch:是一個開源分布式搜索引擎
  • Logstash :是一個數據收集引擎,支持日志搜集、分析、過濾,支持大量數據獲取。其自帶輸入(input)、過濾語法(grok)、輸出(output)三部分,可將數據輸出到ES
  • Kibana:為 Elasticsearch 提供了分析和 Web 可視化界面

二、如何搭建ELK

各個版本:

ElasticSearch ,Logstash ,Kibana 的版本都為 7.14.0 , JDK:11

1、搭建 ElasticSearch 和 Kibana

參考我之前的博客:

Springboot中使用Elasticsearch(部署+使用+講解 最完整)_spring boot elasticsearch-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_73440769/article/details/141477177?spm=1001.2014.3001.5501

2、搭建Logstash

1.查看自己的es版本

docker images

2.拉取鏡像

這個步驟有點慢,可能是我的網絡原因

docker pull docker.elastic.co/logstash/logstash:7.14.0

3.上傳mysql的連接jar包

?可以去IDEA里面復制你Maven里面的:

創建文件夾存放

mkdir -p /opt/logstash/jar
mkdir -p /opt/logstash/jar




4.運行一下鏡像獲取配置文件

docker run -d --name=logstash logstash:7.14.0

第一次創建 用于復制文件?

5.查看日志

docker logs -f logstash

?

6.拷貝數據

docker cp logstash:/usr/share/logstash/config /opt/logstash
docker cp logstash:/usr/share/logstash/data /opt/logstash
docker cp logstash:/usr/share/logstash/pipeline /opt/logstash

7.給文件夾賦權

cd /opt/logstash
chmod -R 777 ./config ./data ./pipeline



8.刪除容器
?

docker rm -f logstash



9.重新啟動容器

docker run -d \--name=logstash \--restart=always \-p 5044:5044 \-v /opt/logstash/data:/usr/share/logstash/data \-v /opt/logstash/jar/mysql-connector-java-8.0.25.jar:/usr/share/logstash/mysql-connector-java-8.0.25.jar \-v /opt/logstash/config:/usr/share/logstash/config \-v /opt/logstash/pipeline:/usr/share/logstash/pipeline \logstash:7.14.0



10.更新配置文件logstash.conf

input {jdbc {jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.25.jar"jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_connection_string => "jdbc:mysql://數據庫IP/quick_pickup"jdbc_user => "數據庫用戶名"jdbc_password => "數據庫密碼"statement => "SELECT id AS id,openid AS openid,quick_user_id AS quickUserId,name AS name,sex AS sex,avatar AS avatar,phone AS phone,follow AS follow,fan AS fan,wallet AS wallet,DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS createTime,use_time AS useTime,collect_number AS collectNumber,mark_number AS markNumber,brief_introduction AS briefIntroductionFROM user"lowercase_column_names => false # 關閉傳輸字段默認小寫的配置# 開啟分頁jdbc_paging_enabled => truejdbc_page_size => 2000schedule => "*/5 * * * * * UTC"  # 每5秒執行一次}
}output {elasticsearch {hosts  => ["es所在服務器的IP:9200"]index  => "user"                 # Elasticsearch 索引名稱document_id => "%{id}"           # 使用 MySQL 的主鍵 `id` 作為文檔 IDcodec  => "json"}
}

11.修改logstash.yml

12.重啟容器

docker stop logstash
docker start logstash

或者:
?

docker restart logstash




13.再次打印日志查看

docker logs -f logstash

三、提醒

記得打開服務器對應的端口(5044)

四、可能遇到的bug

下面是我之前遇到的問題,最后都解決了,上面配置文件是最新更新后的配置文件

  1. logstash輸出到es的字段都是小寫
  2. 時間字段不是我們希望的格式
這些bug可以參考我上面編寫更新后的配置文件,下面給出github一個大佬的一些匯總,可以參考一下:


https://github.com/logstash-plugins/logstash-filter-date/issues/158icon-default.png?t=O83Ahttps://github.com/logstash-plugins/logstash-filter-date/issues/158

#logstash輸入配置
input {#jdbc輸入配置,用來指定mysql中需要同步的數據查詢SQL及同步周期jdbc {type => "jdbc"jdbc_connection_string => "jdbc:mysql://localhost:3306/dh_order?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false"# 數據庫連接賬號密碼;jdbc_user => "dh_test"jdbc_password => "Y2017dh123"# MySQL依賴包路徑;jdbc_driver_library => "mysql/mysql-connector-java-5.1.49.jar"jdbc_driver_class => "com.mysql.jdbc.Driver"# 數據庫重連嘗試次數connection_retry_attempts => "3"# 判斷數據庫連接是否可用,默認false不開啟jdbc_validate_connection => "true"# 數據庫連接可用校驗超時時間,默認3600Sjdbc_validation_timeout => "3600"# 是否開啟分頁jdbc_paging_enabled => true# statement => "SELECT *, UNIX_TIMESTAMP(modification_time) AS unix_ts_in_secs FROM es_table WHERE (UNIX_TIMESTAMP(modification_time) > :sql_last_value AND modification_time < NOW()) ORDER BY modification_time ASC"# statement => "SELECT * FROM `t_car_order` limit 1"statement => "SELECT id,create_time FROM `t_car_order` limit 1"# 是否將字段名轉換為小寫,默認true(如果有數據序列化、反序列化需求,建議改為false);# lowercase_column_names => false# Value can be any of: fatal,error,warn,info,debug,默認info;# sql_log_level => warnsql_log_level => debug# 是否記錄上次執行結果,true表示會將上次執行結果的tracking_column字段的值保存到last_run_metadata_path指定的文件中;# record_last_run => true# 需要記錄查詢結果某字段的值時,此字段為true,否則默認tracking_column為timestamp的值;# use_column_value => true# 需要記錄的字段,用于增量同步,需是數據庫字段# tracking_column => "ModifyTime"# Value can be any of: numeric,timestamp,Default value is "numeric"# tracking_column_type => timestamp# record_last_run上次數據存放位置;# last_run_metadata_path => "mysql/last_id.txt"# 是否清除last_run_metadata_path的記錄,需要增量同步時此字段必須為false;# clean_run => false# 設置定時任務間隔  含義:分、時、天、月、年,全部為*默認含義為每分鐘跑一次任務,這里設置為每5分鐘同步一次# schedule => "*/5 * * * * *"# 用來控制增量更新的字段,一般是自增id或者創建、更新時間,注意這里要采用sql語句中select采用的字段別名# tracking_column => "unix_ts_in_secs"# tracking_column 對應字段的類型# tracking_column_type => "numeric"}
}
#logstash輸入數據的字段匹配和數據過濾
# filter {
#   mutate {
#     copy => { "id" => "[@metadata][_id]"}
#     remove_field => ["id", "@version", "unix_ts_in_secs"]
#   }
# }
filter {# date {#   match => ["update_time", "yyyy-MM-dd HH:mm:ss"]#   target => "update_time"# }# date {#   match => ["create_time", "yyyy-MM-dd HH:mm:ss"]#   target => "create_time"# }# mutate {#   convert => { "create_time" => "text" }   # 將create_time字段轉換為字符串類型# }# ruby {#   code => 'event.set("create_time", event.get("create_time").strftime("%Y-%m-%d %H:%M:%S"))'# }#  date {#   match => ["create_time", "yyyy-MM-dd HH:mm:ss"]#   target => "create_time"#   timezone => "Asia/Shanghai" # 你的時區# }mutate {add_field => { "index_date" => "%{create_time}" }}# mutate {#   rename => { "create_time_string" => "index_date" }# }#  date {#   # match => ["index_date", "ISO8601"]#   match => ["index_date", "ISO8601"]#   # target => "index_date"# }# }date {match => ["index_date", "yyyy-MM-dd HH:mm:ss"]# target => "index_date"# target => "index_date"}# mutate {#   add_field => {#     "index_date1" => "%{index_date}"#   }}
#logstash輸出配置
output {# 采用stdout可以將同步數據輸出到控制臺,主要是調試階段使用# stdout { codec =>  json_lines}stdout { codec =>  rubydebug}# 指定輸出到ES的具體索引# elasticsearch {#     index => "rdbms_sync_idx"#     document_id => "%{[@metadata][_id]}"# }elasticsearch {# host => "192.168.1.1"# port => "9200"# 配置ES集群地址# hosts => ["192.168.1.1:9200", "192.168.1.2:9200", "192.168.1.3:9200"]hosts => ["localhost:9200"]# 索引名字,必須小寫# index => "t_car_order-%{+YYYY.MM.dd}"index => "t_car_order_%{index_date}"# index => "t_car_order_@timestamp"# index => "t_car_order3"# 數據唯一索引(建議使用數據庫KeyID)# document_id => "%{KeyId}"document_id => "%{id}"# document_id => "ID"}
}

?關于字段大小寫問題還可以參考這幾篇博客:

Elasticsearch-logstash同步mysql數據 字母大小寫問題_es 字段小寫-CSDN博客文章瀏覽閱讀2.5k次。logstash同步mysql數據的時候,sql里面含有的大寫字母,到了ES的時候就會變成小寫,這是因為在jdbc.conf里面沒有添加lowercase_column_names => false"這個屬性,就導致es里面看到的字段名稱全是小寫。最后總結:es是支持大寫字段名稱的,如果想要保留原有的大寫字母,需要在同步配置中加上lowercase_column_names ..._es 字段小寫https://blog.csdn.net/qinyuezhan/article/details/89215215

Logstash將字段名全部轉換為小寫 - 騰訊云開發者社區 - 騰訊云Logstash是一個開源的數據收集引擎,用于將不同來源的數據進行收集、轉換和傳輸。它是Elastic Stack(Elasticsearch、Logstash、Kibana)中的一部分,用于處理和分......icon-default.png?t=O83Ahttps://cloud.tencent.com/developer/information/Logstash%E5%B0%86%E5%AD%97%E6%AE%B5%E5%90%8D%E5%85%A8%E9%83%A8%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%B0%8F%E5%86%99-salon

五、至此ELK搭建結束

歡迎大家在評論區談一下自己遇到的問題和看法,互相學習。

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

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

相關文章

Dubbo-筆記隨記一

一、實戰 1 . Springboot整合 1.1 服務提供者 1.1.1 依賴 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.2.10</version></dependency><dependency&g…

git tag

文章目錄 1.簡介2.格式3.選項4.示例參考文獻 1.簡介 同大多數 VCS 一樣&#xff0c;Git 也可以對某一時間點的版本打上標簽&#xff0c;用于版本的發布管理。 一個版本發布時&#xff0c;我們可以為當前版本打上類似于 v.1.0.1、v.1.0.2 這樣的 Tag。一個 Tag 指向一個 Commi…

ETCD滲透利用指南

目錄 未指定使用put操作報錯 未指定操作版本使用get報錯 首先etcd分為兩個版本v2和v3&#xff0c;不同的API結果無論是訪問URL還是使用etcdctl進行通信&#xff0c;都會導致問題&#xff0c;例如使用etcdctl和v3進行通信&#xff0c;如果沒有實名ETCDCTL_API3指定API版本會直接…

使用VUE3創建個人靜態主頁

使用VUE3創建個人靜態主頁 &#x1f31f; 前言&#x1f60e;體驗&#x1f528; 具體實現? 核心功能&#x1f3d7;? 項目結構&#x1f680; 用這個項目部署 Git Page &#x1f4d6; 參考 &#x1f31f; 前言 作為開發者或者內容創作者&#xff0c;我們經常需要創建靜態網頁&a…

Lua語言中常用的字符串操作函數

string.sub(s, i, j) 功能: 截取字符串 s 中從位置 i 到位置 j 的子字符串。 local s "Hello, Lua!" print(string.sub(s, 1, 5)) -- 輸出 "Hello" print(string.sub(s, 8, 11)) -- 輸出 "Lua!" string.len(s) 功能&#xff1a;將字符串長度…

llm大模型學習

llm大模型 混合專家模型&#xff08;MoE&#xff09;MoE結構路由router專家expertSwitch Transformer的典型MOE模型最后MoE總結 混合專家模型&#xff08;MoE&#xff09; 模型規模是提升LLM大語言模型性能的關鍵因素&#xff0c;但也會增加計算成本。Mixture of Experts (MoE…

Linux入門攻堅——43、keepalived入門-1

Linux Cluster&#xff08;Linux集群的類型&#xff09;&#xff1a;LB、HA、HPC&#xff0c;分別是負載均衡集群、高可用性集群、高性能集群。 LB&#xff1a;lvs&#xff0c;nginx HA&#xff1a;keepalived&#xff0c;heartbeat&#xff0c;corosync&#xff0c;cman HP&am…

HTML5 動畫效果:淡入淡出(Fade In/Out)詳解

HTML5 動畫效果&#xff1a;淡入淡出&#xff08;Fade In/Out&#xff09;詳解 淡入淡出&#xff08;Fade In/Out&#xff09;是一種常見的動畫效果&#xff0c;使元素逐漸顯現或消失&#xff0c;增強用戶體驗。以下是淡入淡出的詳細介紹及實現示例。 1. 淡入淡出的特點 平滑…

YOLOv8/YOLOv11改進 添加CBAM、GAM、SimAM、EMA、CAA、ECA、CA等多種注意力機制

目錄 前言 CBAM GAM SimAM EMA CAA ECA CA 添加方法 YAML文件添加 使用改進訓練 前言 本篇文章將為大家介紹Ultralytics/YOLOv8/YOLOv11中常用注意力機制的添加&#xff0c;可以滿足一些簡單的漲點需求。本文僅寫方法&#xff0c;原理不多講解&#xff0c;需要可跳…

Go語言的 的多態性(Polymorphism)基礎知識

Go語言的多態性&#xff08;Polymorphism&#xff09;基礎知識 在編程語言中&#xff0c;多態性是一個核心概念&#xff0c;它允許同一接口被不同的數據類型所實現&#xff0c;從而在不影響代碼結構的情況下增強代碼的靈活性和可擴展性。在Go語言中&#xff0c;多態性通過接口…

nginx運行之后顯示的是上一個項目,如何解決

重啟 Nginx 使配置生效 修改 Nginx 配置后&#xff0c;你需要重新加載或重啟 Nginx&#xff0c;以使配置生效。執行以下命令&#xff1a; sudo nginx -t # 測試配置是否正確 sudo systemctl restart nginx # 重啟 Nginxbash 復制代碼 檢查瀏覽器緩存 瀏覽器可能緩存了舊…

與 Oracle Dataguard 相關的進程及作用分析

與 Oracle Dataguard 相關的進程及作用分析 目錄 與 Oracle Dataguard 相關的進程及作用分析與 Oracle Dataguard 相關的進程及作用分析一、主庫的進程1、LGWR 進程2、ARCH進程3、LNS 進程 二、備庫的進程1、RFS 進程2、ARCH3、MRP&#xff08;Managed Recovery Process&#x…

【C語言】_指針與數組

目錄 1. 數組名的含義 1.1 數組名與數組首元素的地址的聯系 1.3 數組名與首元素地址相異的情況 2. 使用指針訪問數組 3. 一維數組傳參的本質 3.1 代碼示例1&#xff1a;函數體內計算sz&#xff08;sz不作實參傳遞&#xff09; 3.2 代碼示例2&#xff1a;sz作為實參傳遞 3…

解決“KEIL5軟件模擬仿真無法打印浮點數”之問題

在沒有外部硬件支持時&#xff0c;我們會使用KEIL5軟件模擬仿真&#xff0c;這是是仿真必須要掌握的技巧。 1、點擊“Project”&#xff0c;然后點擊“Options for target 項目名字”&#xff0c;點擊“Device”,選擇CPU型號。 2、點擊“OK” 3、點擊“Target”,勾選“Use Mi…

donet (MVC)webAPI 的接受json 的操作

直接用對象來進行接收&#xff0c;這個方法還不錯的。 public class BangdingWeiguiJiluController : ApiController{/// <summary>/// Json數據錄入錯誤信息/// </summary>/// <param name"WeiguiInfos"></param>/// <returns></r…

設計模式與游戲完美開發(3)

更多內容可以瀏覽本人博客&#xff1a;https://azureblog.cn/ &#x1f60a; 該文章主體內容來自《設計模式與游戲完美開發》—蔡升達 第二篇 基礎系統 第五章 獲取游戲服務的唯一對象——單例模式&#xff08;Singleton&#xff09; 游戲實現中的唯一對象 在游戲開發過程中…

pygame飛機大戰

飛機大戰 1.main類2.配置類3.游戲主類4.游戲資源類5.資源下載6.游戲效果 1.main類 啟動游戲。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置類 該類主要存放游戲的各種設置參數。 #窗口尺寸 #窗口尺寸 import random import p…

thinkphp通過html生成pdf

thinkphp 生成pdf {__NOLAYOUT__} <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>合同模板</title><style>/*打印內容*/media print {page {size: A4 landscape; /* auto is the initi…

如何讓用戶在網頁中填寫PDF表格?

在網頁中讓用戶直接填寫PDF表格&#xff0c;可以大大簡化填寫、打印、掃描和提交表單的流程。通過使用復選框、按鈕和列表等交互元素&#xff0c;PDF表格不僅讓填寫過程更高效&#xff0c;還能方便地在電腦或移動設備上訪問和提交數據。 以下是在瀏覽器中顯示可填寫PDF表單的四…

ThinkPHP 8高效構建Web應用-獲取請求對象

【圖書介紹】《ThinkPHP 8高效構建Web應用》-CSDN博客 《2025新書 ThinkPHP 8高效構建Web應用 編程與應用開發叢書 夏磊 清華大學出版社教材書籍 9787302678236 ThinkPHP 8高效構建Web應用》【摘要 書評 試讀】- 京東圖書 使用VS Code開發ThinkPHP項目-CSDN博客 編程與應用開…