k8s pod日志寫入ELK的具體實現

shigen堅持更新文章的博客寫手,擅長Java、python、vue、shell等編程語言和各種應用程序、腳本的開發。記錄成長,分享認知,留住感動。

在上一部分,shigen講到了k8spod的日志寫入ELK的三種技術方案,并在最后展示了一下我實現的效果,那具體的怎么實現呢?今天這一篇文章我們具體的展示一下,先帶大家回顧一下上篇文章的效果:

方案三效果

上一篇的地址shigen會在文章末尾貼出,今天的文章主要是講解它的集體實現。

ELK的搭建

當我們搭建好了ELK集群之后,需要著重的修改一下logstash的配置文件logstash/pipeline/logstash.conf :

  input {tcp {mode => "server"host => "0.0.0.0"    port => 50000codec => json_lines}}output {elasticsearch {hosts => "elasticsearch:9200"       #es地址index => "springboot-logstash-%{+YYYY.MM.dd}"           #寫入的索引名user => "elastic"                   #es用戶password => "123456"                #es密碼}#logstash控制臺輸入采集到的數據,用于調試stdout {codec => rubydebug}}

這是shigen本次用到的配置文件,需要注意的是:

  • 約定TCP服務的端口是50000,需要在docker-compose中掛載到主機上
  • es的地址盡量使用內網或者k8s提供的svc,節省不必要的流量消耗
  • 需要安裝插件 log stash-codec-json_lines 需要的時間老長了

安裝插件 logstash-codec-json_lines

配置完了啟動即可。

本地的ELK集群

搭建spring boot服務

搭建spring boot服務

基本的項目結構就不說了,用到了mybatis-plus作為ORM框架。我們現在需要的就是把項目的日志輸出到logstash,讓它處理完放到elasticsearch

配置日志文件

本次的日志框架shigen選取的是logback,它需要把日志寫入到logstach,它的途徑就是logstash提供的TCP端口。

在項目的resource目錄下邊新建文件logback-spring.xml文件,文件內容是這樣的:

<?xml version="1.0" encoding="UTF-8"?><configuration><!--指定property屬性變量--><property name="log.path" value="./logs/logback-demo"/><property name="destination" value="127.0.0.1:50000"/><property name="appname" value="logdemo"/><!-- 日志輸出格式%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n--><!-- 控制臺 appender--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset></encoder></appender><!-- 文件 滾動日志 (all)--><appender name="allLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 當前日志輸出路徑、文件名 --><file>${log.path}/all.log</file><!--日志輸出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset></encoder><!--歷史日志歸檔策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 歷史日志: 歸檔文件名 --><fileNamePattern>${log.path}/%d{yyyy-MM, aux}/all.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!--單個文件的最大大小--><maxFileSize>64MB</maxFileSize><!--日志文件保留天數--><maxHistory>15</maxHistory></rollingPolicy></appender><!-- 文件 滾動日志 (僅error)--><appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 當前日志輸出路徑、文件名 --><file>${log.path}/error.log</file><!--日志輸出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset></encoder><!--歷史日志歸檔策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 歷史日志: 歸檔文件名 --><fileNamePattern>${log.path}/%d{yyyy-MM, aux}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!--單個文件的最大大小--><maxFileSize>64MB</maxFileSize><!--日志文件保留天數--><maxHistory>15</maxHistory></rollingPolicy><!-- 此日志文檔只記錄error級別的  level過濾器--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>error</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 文件 異步日志(async) --><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"immediateFlush="false" neverBlock="true"><!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 --><discardingThreshold>0</discardingThreshold><!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 --><queueSize>1024</queueSize><neverBlock>true</neverBlock><!-- 添加附加的appender,最多只能添加一個 --><appender-ref ref="allLog"/></appender><!--輸出到logstash的appender--><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--可以訪問的logstash日志收集端口--><destination>${destination}</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"><!--自定義字段,區分應用名稱--><customFields>{"appname":"logdemo"}</customFields></encoder></appender><!-- root 級別的配置 --><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="ASYNC"/><appender-ref ref="errorLog"/><appender-ref ref="logstash"/></root><!--可輸出mapper層sql語句等--><logger name="com.gitee.shigen.logbackspringboot.mapper" level="debug"/><!--輸出jdbc 事務相關信息--><logger name="org.springframework.jdbc" level="debug"/></configuration>

注意到我們的其實是有四個目的地的,包括:控制臺、文件、logstash以及我們的滾動策略和文件大小超過一定的指標之后的策略。

現在我們只需要啟動服務,在kibana那邊持續的觀察:

和我們常見的都一樣,輸出了mybatis-plus查詢的sql語句。我們再來看下kibana的界面,剛才我們的日志也展示出來了。而且字段很全,自動的幫我們處理了。

kibana日志展示

后記

也許我們還會存在這樣的疑問:這是一個實例的,如果是多實例的,或者一個服務有多個副本怎么辦呢?這個shigen考慮到了,我么可以自定義字段,在我的配置文件中有這個字段:

<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"><!--自定義字段,區分應用名稱--><customFields>{"appname":"logdemo"}</customFields>
</encoder>

就可以標識出來,在es中也可以一個查詢條件,查找相對應地服務日志。

現在還是本地啟動,shigen也會持續輸出在k8s上的服務日志,歡迎持續關注。


以上就是今天分享的全部內容了,覺得不錯的話,記得點贊 在看 關注支持一下哈,您的鼓勵和支持將是shigen堅持日更的動力。同時,shigen在多個平臺都有文章的同步,也可以同步的瀏覽和訂閱:

平臺賬號鏈接
CSDNshigen01shigen的CSDN主頁
知乎gen-2019shigen的知乎主頁
掘金shigen01shigen的掘金主頁
騰訊云開發者社區shigenshigen的騰訊云開發者社區主頁
微信公眾平臺shigen公眾號名:shigen

shigen一起,每天不一樣!

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

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

相關文章

QMainWindow和QWidget有什么區別

2023年12月12日&#xff0c;周二上午 QMainWindow 和 QWidget 是 Qt 框架中兩個不同的類&#xff0c;用于創建用戶界面的窗口部件。它們之間的主要區別在于它們的設計和用途。 QMainWindow: QMainWindow 是用于創建主窗口的類&#xff0c;通常包含了一個應用程序的主要界面。…

NFR 數字權益開發流程

NFR 在技術開發領域通常指的是“非功能性需求”&#xff08;Non-Functional Requirements&#xff09;&#xff0c;這些是描述系統屬性如安全性、性能、可用性、兼容性等方面的需求。然而&#xff0c;如果在這里 NFR 被用來指代與數字權益或非同質化代幣&#xff08;NFT&#x…

C++ 構造函數 調用方法

構造函數 調用方法 //括號法&#xff08;常用&#xff09; Person p1(100); //有參構造 Person p2(p1); //拷貝構造//注意&#xff1a;不要用括號法調用無參構造&#xff0c;會和 函數聲明 混淆。//顯示法 Person p3 Person(); //無參構造 Person p4 Person(100); //有參構…

【USRP】LFTX / LFRX

LFTX/LFRX 設備概述 LFTX 子板利用兩個高速運算放大器來允許 0-30 MHz 的傳輸。該板僅接受實模式信號。LFTX 非常適合 HF 頻段的應用&#xff0c;或使用外部前端來上變頻和放大中間信號的應用。LFTX 的輸出可以獨立處理&#xff0c;也可以作為單個 I/Q 對進行處理。 主要特征…

Python - 搭建 Flask 服務實現圖像、視頻修復需求

目錄 一.引言 二.服務構建 1.主函數 upload_gif 2.文件接收 3.專屬目錄 4.圖像修復 5.gif2mp4 6.mp42gif 7.圖像返回 三.服務測試 1.服務啟動 2.服務調用 四.總結 一.引言 前面我們介紹了如何使用 Real-ESRGAN 進行圖像增強并在原始格式 jpeg、jpg、mp4 的基礎上…

HeartBeat監控Redis狀態

目錄 一、概述 二、 安裝部署 三、配置 四、啟動服務 五、查看數據 一、概述 使用heartbeat可以實現在kibana界面對redis服務存活狀態進行觀察&#xff0c;如有必要&#xff0c;也可在服務宕機后立即向相關人員發送郵件通知 二、 安裝部署 參照文章&#xff1a;HeartBeat監…

Java實現多線程的三種方式

Java 有三種方式實現多線程&#xff0c;繼承 Thread 類、實現 Runnable 接口、實現 Callable 接口。還有匿名內部類方式&#xff0c;Lambda 表達式方式簡化開發。 1、Thread Thread 創建線程方式&#xff1a;創建線程類 start() 方法底層其實是給 CPU 注冊當前線程&#xff0…

關于IDEA中maven的作用以及如何配置MAVEN

關于IDEA中maven的作用以及如何配置MAVEN 1、Maven是什么2、Idea中對于Maven的配置3、下載依賴時&#xff0c;Idea下方的顯示3.1、Maven中央倉庫的下載顯示界面3.2、阿里云倉庫的下載顯示界面 4、Maven在Idea中的使用4.1、clean4.2、validate4.3、compile4.4、test&#xff08;…

智能優化算法應用:基于人工蜂群算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于人工蜂群算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于人工蜂群算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.人工蜂群算法4.實驗參數設定5.算法結果6.…

java智能異常處理

標題&#xff1a;優雅處理異常&#xff1a;Java智能異常處理的最佳實踐 摘要&#xff1a;在軟件開發中&#xff0c;異常處理是一項至關重要的任務。本文將介紹Java中的智能異常處理技術&#xff0c;通過合理的異常處理規范和最佳實踐&#xff0c;幫助開發者優雅地處理異常情況…

從零構建屬于自己的GPT系列5:模型部署1(文本生成函數解讀、模型本地化部署、文本生成文本網頁展示、代碼逐行解讀)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 實戰系列 總目錄 有任何問題歡迎在下面留言 本篇文章的代碼運行界面均在PyCharm中進行 本篇文章配套的代碼資源已經上傳 從零構建屬于自己的GPT系列1&#xff1a;數據預處理 從零構建屬于自己的GPT系列2&#xff1a;模型訓…

2023年國賽高教杯數學建模A題定日鏡場的優化設計解題全過程文檔及程序

2023年國賽高教杯數學建模 A題 定日鏡場的優化設計 原題再現 構建以新能源為主體的新型電力系統&#xff0c;是我國實現“碳達峰”“碳中和”目標的一項重要措施。塔式太陽能光熱發電是一種低碳環保的新型清潔能源技術[1]。 ??定日鏡是塔式太陽能光熱發電站&#xff08;以下…

ES6-import后是否有{}的區別

在ES6中&#xff0c;import語句用于導入其他模塊中的變量、函數、類等。在使用import語句時&#xff0c;可以選擇是否使用花括號{}來包裹導入的內容&#xff0c;這會影響導入的內容的使用方式。 1.使用花括號{}&#xff1a; 當使用花括號{}時&#xff0c;表示只導入指定的變量…

【Fastadmin】根據Fieldlist鍵值組件做一個等級配置的完整示例

目錄 1.效果展示&#xff1a; ?編輯 2.建表&#xff1a; 3.html頁面 4.controller控制器 5.js 6.model 1.效果展示&#xff1a; 2.建表&#xff1a; 表名&#xff1a;fa_xxfb_config /*Navicat Premium Data TransferSource Server : rootSource Server Type …

深入Docker命令行:探索常用命令和實用技巧

Docker命令行界面是每個容器開發者的得力工具。在這篇文章中&#xff0c;將深入探討一系列常用的Docker命令&#xff0c;以及一些實用技巧&#xff0c;通過更豐富的示例代碼&#xff0c;幫助大家更全面地理解和運用Docker命令行工具。 1. Docker基本命令 1.1 鏡像操作 深入了…

用 CSS 寫一個漸變色邊框的輸入框

Using_CSS_gradients MDN 多漸變色輸入框&#xff0c;群友問了下&#xff0c;就試著寫了下&#xff0c;看了看 css 漸變色 MDN 文檔&#xff0c;其實很簡單&#xff0c;代碼記錄下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta ch…

使用FFMPEG轉碼,轉單聲道,轉標準WAV,轉PCM

本文為使用FFMPEG命令行的方式處理音頻&#xff0c;來獲取想要得到的音頻文件。 零、使用命令行查看編碼封裝信息 格式&#xff1a;ffprobe.exe -show_format inputfile 例子&#xff1a;ffprobe.exe -show_format .\stereo_44_16bit.wav 運行結果為下圖&#xff1a; 如圖可…

C# Channel實現線程間通信

C# Channel實現線程間通信 同步方式實現&#xff1a; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Channels; using System.Threading.T…

【JavaFX】實現計算器小程序

下面是一個簡單的JavaFX計算器示例: import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.…

西南科技大學數字電子技術實驗四(基本觸發器邏輯功能測試及FPGA的實現)預習報告

一、計算/設計過程 說明:本實驗是驗證性實驗,計算預測驗證結果。是設計性實驗一定要從系統指標計算出元件參數過程,越詳細越好。用公式輸入法完成相關公式內容,不得貼手寫圖片。(注意:從抽象公式直接得出結果,不得分,頁數可根據內容調整) (1)D觸發器 特征方程: Q…