k8s 全面掌控日志系統

概述

為了提高系統運維和故障排查的效率, 日志系統采用 ELK(Elasticsearch、Logstash、Kibana)技術棧,通過 FileBeats 作為日志收集器,將來自不同節點的日志數據匯總并存儲在 Elasticsearch 中,最終通過 Kibana 進行可視化展示和分析。

系統配置包括 FileBeats 的收集規則、Logstash 的處理管道和 Elasticsearch 的索引設置。部署過程采用 Kubernetes 的 Helm Chart 實現,簡化了安裝和管理。

架構

FileBeats + Kafka + ELK

??: 在不影響舊有日志系統運行的前提下,我們在現有的 ELK+Kafka 架構基礎上,新增了 Filebeat 作為日志收集器,用于采集 Kubernetes 日志。

在這里插入圖片描述

? 日志采集器Logstash其功能雖然強大,但是它依賴java、在數據量大的時候,Logstash進程會消耗過多的系統資源,這將嚴重影響業務系統的性能,而filebeat就是一個完美的替代者,它基于Go語言沒有任何依賴,配置文件簡單,格式明了,同時filebeat比logstash更加輕量級,所以占用系統資源極少,非常適合安裝在生產機器上。這就是推薦使用filebeat,也是 ELK Stack 在 Agent 的第一選擇。
? 此架構適合大型集群、海量數據的業務場景,它通過將前端Logstash Agent替換成filebeat,有效降低了收集日志對業務系統資源的消耗。同時,消息隊列使用kafka集群架構,有效保障了收集數據的安全性和穩定性,而后端Logstash和Elasticsearch均采用集群模式搭建,從整體上提高了ELK系統的高效性、擴展性和吞吐量。我所在的項目組采用的就是這套架構,由于生產所需的配置較高,且涉及較多持久化操作,采用的都是性能高配的云主機搭建方式而非時下流行的容器搭建

部署

elasticsearch

安裝方式:helm

安裝版本:8.5.1

?? helm安裝8版本elastic默認開啟ssl認證,我們這邊禁用認證

開始前奏操作,生成secret

# 根據提供的 elastic-certificates.p12 將 pcks12 中的信息分離出來,寫入文件
openssl pkcs12 -nodes -passin pass:'' -in elastic-certificates.p12 -out elastic-certificate.pem添加證書和密碼到集群
# 添加證書
kubectl create secret generic elastic-certificates --from-file=elastic-certificates.p12
kubectl create secret generic elastic-certificate-pem --from-file=elastic-certificate.pem# 設置集群用戶名密碼,用戶名不建議修改
##命令行
kubectl create secret generic elastic-credentials \--from-literal=username=elastic --from-literal=password=123456
##yaml
apiVersion: v1
data:password: MTIzNDU2username: ZWxhc3RpYw==
kind: Secret
metadata:name: elastic-credentialsnamespace: elastic
type: Opaque

🏴 加油特種兵

先添加elasticsearch的helm倉庫,并拉取對應版本的Charts并對其解壓

[root@ycloud ~]# helm repo add elastic https://helm.elastic.co
"elastic" has been added to your repositories
[root@ycloud ~]# helm pull elastic/elasticsearch --version 8.5.1
[root@ycloud ~]# tar -zxvf elasticsearch-8.5.1.tgz 
elasticsearch/Chart.yaml
elasticsearch/values.yaml
......

調整values

replicas: 2
minimumMasterNodes: 1esMajorVersion: ""# Allows you to add any config files in /usr/share/elasticsearch/config/
# such as elasticsearch.yml and log4j2.properties# ==================安全配置========================
protocol: http###掛在證書,這里用我們上面創建的證書
secretMounts: - name: elastic-certificatessecretName: elastic-certificatespath: /usr/share/elasticsearch/config/certsdefaultMode: 0755esConfig: elasticsearch.yml: |xpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
#    key:
#      nestedkey: value
#  log4j2.properties: |
#    key = value## 關閉ssl認證
createCert: false        
esJavaOpts: "-Xmx1g -Xms1g"###指定elastic用戶密碼
extraEnvs: - name: ELASTIC_USERNAMEvalueFrom:secretKeyRef:name: elastic-credentials    ###用我們創建的secretkey: username- name: ELASTIC_PASSWORDvalueFrom:secretKeyRef:name: elastic-credentials		###用我們創建的secretkey: password
###true開啟持久化
persistence:enabled: true

kibana

安裝方式:helm

安裝版本:8.5.1

??: 默認使用身份驗證和TLS部署Kibana 8.5.1連接到Elasticsearch

🐤:重置kibana_system賬戶密碼

[root@ycloud hub]# kubectl exec -it elasticsearch-master-0 -- bin/elasticsearch-reset-password -u kibana_system
Defaulted container "elasticsearch" out of: elasticsearch, configure-sysctl (init)
This tool will reset the password of the [kibana_system] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]yPassword for the [kibana_system] user successfully reset.
New value: nVUE*km=842x7duqB4TR

🐤:更新 elastic-credentials文件

# [root@ycloud hub]# echo nVUE*km=842x7duqB4TR|base64 
blZVRSprbT04NDJ4N2R1cUI0VFIK
apiVersion: v1
data:kibana_password: blZVRSprbT04NDJ4N2R1cUI0VFIK kibana_username: a2liYW5hX3N5c3RlbQ==password: MTIzNDU2username: ZWxhc3RpYw==
kind: Secret
metadata:name: elastic-credentialsnamespace: elastic
type: Opaque

🏴 加油特種兵

先添加kibana的helm倉庫,并拉取對應版本的Charts并對其解壓

[root@ycloud ~]# helm repo add elastic https://helm.elastic.co
"elastic" has been added to your repositories
[root@ycloud ~]# helm pull elastic/kibana --version 8.5.1
[root@ycloud ~]# tar -zxvf kibana-8.5.1.tgz 
kibana/Chart.yaml
kibana/values.yaml
......

調整template

# cd kibana/templates/ ; rm -rf post-delete-* pre-install-*
##刪除deployment.yaml部分內容
---- name: ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIESvalue: "{{ template "kibana.home_dir" . }}/config/certs/{{ .Values.elasticsearchCertificateAuthoritiesFile }}"- name: ELASTICSEARCH_SERVICEACCOUNTTOKENvalueFrom:secretKeyRef:name: {{ template "kibana.fullname" . }}-es-tokenkey: tokenoptional: false
--- readinessProbe:
{{ toYaml .Values.readinessProbe | indent 10 }}exec:command:- bash- -c- |#!/usr/bin/env bash -e# Disable nss cache to avoid filling dentry cache when calling curl# This is required with Kibana Docker using nss < 3.52export NSS_SDB_USE_CACHE=nohttp () {local path="${1}"set -- -XGET -s --fail -Lif [ -n "${ELASTICSEARCH_USERNAME}" ] && [ -n "${ELASTICSEARCH_PASSWORD}" ]; thenset -- "$@" -u "${ELASTICSEARCH_USERNAME}:${ELASTICSEARCH_PASSWORD}"fiSTATUS=$(curl --output /dev/null --write-out "%{http_code}" -k "$@" "{{ .Values.protocol }}://localhost:{{ .Values.httpPort }}${path}")if [[ "${STATUS}" -eq 200 ]]; thenexit 0fiecho "Error: Got HTTP code ${STATUS} but expected a 200"exit 1}http "{{ .Values.healthCheckPath }}"
---- name: elasticsearch-certssecret:secretName: {{ .Values.elasticsearchCertificateSecret }}
---- name: elasticsearch-certsmountPath: {{ template "kibana.home_dir" . }}/config/certsreadOnly: true
---

調整values

# cd kibana/templates/
# rm -rf post-delete-* pre-install-*
---
elasticsearchHosts: "http://elasticsearch-master:9200"
#elasticsearchCertificateSecret: elasticsearch-master-certs
#elasticsearchCertificateAuthoritiesFile: ca.crt
elasticsearchCredentialSecret: elastic-credentialsreplicas: 1extraEnvs:- name: "NODE_OPTIONS"value: "--max-old-space-size=1800"- name: 'ELASTICSEARCH_USERNAME'valueFrom:secretKeyRef:name: elastic-credentialskey: kibana_username- name: 'ELASTICSEARCH_PASSWORD'valueFrom:secretKeyRef:name: elastic-credentialskey: kibana_passwordresources:requests:cpu: "1000m"memory: "2Gi"limits:cpu: "1000m"memory: "2Gi"protocol: httpserverHost: "0.0.0.0"healthCheckPath: "/app/kibana"

filebeat

??: 詳情見 Here

總結

日志系統已成功應用于多種業務場景。為了進一步提高系統的穩定性,后面我們在新的部署中采用 ClickHouse 作為日志存儲解決方案。

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

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

相關文章

創建一個新的Spring Security應用程序,并使用JDBC連接數據庫

創建一個新的Spring Security應用程序&#xff0c;并使用JDBC連接數據庫 在這個教程中&#xff0c;我們將學習如何創建一個新的Spring Security應用程序&#xff0c;使用JDBC連接數據庫以獲取用戶信息并進行認證。我們還將學習如何配置Spring Security以從數據庫中獲取用戶和權…

Vue3使用Composition API實現響應式

title: Vue3使用Composition API實現響應式 date: 2024/5/29 下午8:10:24 updated: 2024/5/29 下午8:10:24 categories: 前端開發 tags: Vue3CompositionRefsReactiveWatchLifecycleDebugging 1. 介紹 Composition API是Vue.js 3中新增的一組API&#xff0c;用于在組件中組…

SQL 語言:嵌入式 SQL 和動態 SQL

文章目錄 基本概述嵌入式 SQL動態 SQL總結 基本概述 嵌入式SQL和動態SQL是兩種在應用程序中嵌入和使用SQL語句的方法。它們都允許開發人員在編程語言中編寫SQL語句&#xff0c;以便在應用程序中執行數據庫操作。然而&#xff0c;這兩種方法在實現方式、性能和靈活性方面存在一…

Java數據結構與算法(紅黑樹)

前言 紅黑樹是一種自平衡二叉搜索樹&#xff0c;確保在插入和刪除操作后&#xff0c;樹的高度保持平衡&#xff0c;從而保證基本操作&#xff08;插入、刪除、查找&#xff09;的時間復雜度為O(log n)。 實現原理 紅黑樹具有以下性質&#xff1a; 每個節點要么是紅色&#…

go語言學習之旅之Go結構體

在Go語言中&#xff0c;結構體&#xff08;struct&#xff09;是一種用戶定義的數據類型&#xff0c;用于組合不同類型的數據項。結構體可以包含其他結構體或基本數據類型的字段。以下是關于Go語言結構體的基本知識&#xff1a; 定義結構體&#xff1a; package mainimport &…

Python 之微信指數小程序數據抓取

Fiddler安裝和設置 安裝 Fiddler 安裝包可以從這里獲取&#xff0c;如果失效了可以自己網上找一個安裝。 鏈接&#xff1a;https://pan.baidu.com/s/1N30BoDWm2_dBL8i8GRzK5g?pwd1znv 提取碼&#xff1a;1znv 然后就是點擊安裝就好了&#xff0c;沒什么好多說的。 啟用…

刷代碼隨想錄有感(83):貪心算法——最大子數組和

題干&#xff1a; 代碼&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {int res INT_MIN;int count 0;for(int i 0; i < nums.size(); i){count nums[i];if(count > res) res count;if(count < 0)count 0;}return res;} …

【創作活動】探索 GPT-4o:下一代語言模型的技術革命

&#x1f604; 19年之后由于某些原因斷更了三年&#xff0c;23年重新揚帆起航&#xff0c;推出更多優質博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有堅忍不拔之志 &#x1f390; 個人CSND主頁——Mi…

HTTP報文

HTTP報文 報文流 HTTP報文是在HTTP引用程序之間發送的數據塊&#xff0c;這些數據塊以一種文本形式的元信息開頭&#xff0c;這些信息描述了報文的內容和含義&#xff0c;后面跟著可選的數據部分&#xff0c;這些報文在客戶端&#xff0c;服務器和代理之間流動。 報文流入源…

git更改本地項目關聯到新倉庫

刪除現在遠程關聯的倉庫 git remote rm origin鏈接新倉庫 git remote add origin url(需要關聯的新倉庫地址)代碼提交到遠程倉庫master分支 git push --set-upstream origin master本地分支更新同步至遠程倉庫 比如本地有dev分支 git push origin dev:dev

前端項目開發,3個HTTP請求工具

這一小節&#xff0c;我們介紹一下前端項目開發中&#xff0c;HTTP請求會用到的3個工具&#xff0c;分別是fetch、axios和js-tool-big-box中的jsonp請求。那么他們都有哪些小區別呢&#xff1f;我們一起來看一下。 目錄 1 fetch 2 axios 3 js-tool-big-box 的 jsonp 請求 …

拷貝構造、移動構造、拷貝賦值、移動賦值

最近在學習C的拷貝構造函數時發現一個問題&#xff1a;在函數中返回局部的類對象時&#xff0c;并沒有調用拷貝構造函數。針對這個問題&#xff0c;查閱了一些資料&#xff0c;這里記錄整理一下。 調用拷貝構造函數的三種情況&#xff1a; ① 用一個類去初始化另一個對象時&a…

【數據結構與算法 | 基礎篇 | 隊列篇】力扣102, 107

1. 力扣102 : 二叉樹的層序遍歷 (1). 題 給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;[[3]…

對于高速信號完整性,一塊聊聊啊(18)

本文摘錄一篇Allegro進行后仿真的完整流程,可能allegro版本有點老,但整個過程還是描述比較詳細的。 目錄 1、獲取IBIS模型 1.1模型下載 1.2檢查IBIS模型 1.3IBIS轉換為DML 1.4保存DML模型 2、仿真準備 2.1疊層設置 2.2電源網格設置 2.3仿真庫配置 3、仿真 3.1拓撲…

刷爆leetcode第六期

題目一 用隊列實現棧 請你僅使用兩個隊列實現一個后入先出&#xff08;LIFO&#xff09;的棧&#xff0c;并支持普通棧的全部四種操作&#xff08;push、top、pop 和 empty&#xff09;。 實現 MyStack 類&#xff1a; void push(int x) 將元素 x 壓入棧頂。 int pop() 移除…

【漏洞復現】大華智能物聯綜合管理平臺 fastjson遠程代碼執行漏洞

0x01 產品簡介 大華ICC智能物聯綜合管理平臺對技術組件進行模塊化和松耦合&#xff0c;將解決方案分層分級&#xff0c;提高面向智慧物聯的數據接入與生態合作能力。 0x02 漏洞概述 由于大華智能物聯綜合管理平臺使用了存在漏洞的Fastson組件,未經身份驗讓的攻擊者可利用 /e…

M功能-支付平臺(六)

target&#xff1a;離開柬埔寨倒計時-217day 今天突然發現我在csdn居然把我ip屬地搞出來了&#xff0c;之前都沒注意到&#xff0c;哎 前言 M功能演示版本做到后期(也就是第二周的后面3天)真的很心酸&#xff0c;這邊安排的4后端后面都放棄了&#xff0c;覺得做不出來&#…

ARM-V9 RME(Realm Management Extension)系統架構之系統能力的內存隔離和保護

安全之安全(security)博客目錄導讀 目錄 一、內存隔離和保護 1、顆粒PAS過濾Granular PAS filtering 2、Cache的一致性維護 2.1 物理別名點 Point of Physical Aliasing (PoPA) 2.2 加密點 3、內存(DRAM)保護 3.1 內存加密和完整性 3.2 DRAM scrubbing 本博客探討 RME…

網絡編程 —— Http使用httpClient實現頁面爬蟲

先去找類型的a標簽 取出圖片所在網址 取出https://desk.3gbizhi.com/deskMV/438.html 搭建Form界面 Http類 public static HttpClient Client { get; } static Http() {HttpClientHandler handler new HttpClientHandler();//處理消息對象//ServerCertificateCustomValidat…

安卓手機APP開發___設置鬧鐘

安卓手機APP開發___設置鬧鐘 目錄 概述 設置不精確鬧鐘 在特定時間后發出鬧鐘 在特定時間范圍內觸發鬧鐘 以大致有規律的時間間隔響起重復鬧鐘 設置精確的鬧鐘 系統會在未來的某個精確時刻調用精確鬧鐘。 可能不需要精確鬧鐘的用例 設置精確鬧鐘的方法 系統資源消耗…