主頁 >  其他 > 輕量級日志收集方案Loki

輕量級日志收集方案Loki

2021-08-31 21:17:52 其他

 先看看結果有多輕量吧

官方檔案:https://grafana.com/docs/loki/latest/ 

簡介

Grafana Loki 是一個日志聚合工具,它是功能齊全的日志堆疊的核心,

Loki 是一個為有效保存日志資料而優化的資料存盤,日志資料的高效索引將 Loki 與其他日志系統區分開來,與其他日志系統不同,Loki 索引是根據標簽構建的,原始日志訊息未編入索引,

代理(也稱為客戶端)獲取日志,將日志轉換為流,然后通過 HTTP API 將流推送到 Loki,Promtail 代理專為 Loki 安裝而設計,但許多其他代理與 Loki 無縫集成,

Loki特點

  • 用于索引日志的高效記憶體使用

    通過在一組標簽上建立索引,索引可以明顯小于其他日志聚合產品,更少的記憶體使得操作成本更低,

  • 多租戶

    Loki 允許多個租戶使用單個 Loki 實體,不同租戶的資料與其他租戶完全隔離,通過在代理中分配租戶 ID 來配置多租戶,

  • LogQL,Loki 的查詢語言

    Prometheus 查詢語言 PromQL 的用戶會發現 LogQL 熟悉且靈活,可用于生成針對日志的查詢,該語言還有助于從日志資料中生成指標,這是一項遠遠超出日志聚合的強大功能,

  • 可擴展性

    Loki 在小范圍內運行良好,在單行程模式下,所有需要的微服務都在一個行程中運行,單行程模式非常適合測驗 Loki、在本地運行或小規模運行,

    Loki 還旨在為大規模安裝進行橫向擴展,Loki 的每個微服務組件都可以分解為單獨的行程,并且配置允許對組件進行單獨擴展,

  • 靈活性

    許多代理(客戶端)都有插件支持,這允許當前的可觀察性結構將 Loki 添加為他們的日志聚合工具,而無需切換可觀察性堆疊的現有部分,

  • Grafana 集成

    Loki 與 Grafana 無縫集成,提供完整的可觀察性堆疊,

Loki / Promtail / Grafana vs EFK

EFK(Elasticsearch、Fluentd、Kibana)堆疊用于從各種來源攝取、可視化和查詢日志,

Elasticsearch 中的資料作為非結構化 JSON 物件存盤在磁盤上,每個物件的鍵和每個鍵的內容都被索引,然后可以使用 JSON 物件定義查詢(稱為查詢 DSL)或通過 Lucene 查詢語言查詢資料,相比之下,單二進制模式的 Loki 可以將資料存盤在磁盤上,但在水平可擴展模式下,資料存盤在云存盤系統中,例如 S3、GCS 或 Cassandra,日志以純文本形式存盤,并標有一組標簽名稱和值,其中僅索引標簽對,這種權衡使得操作比完整索引更便宜,并允許開發人員積極地從他們的應用程式中登錄,使用LogQL查詢 Loki 中的日志,然而,由于這種設計權衡,基于內容(即日志行中的文本)過濾的 LogQL 查詢需要加載搜索視窗中與查詢中定義的標簽匹配的所有塊,

Fluentd 通常用于收集日志并將其轉發到 Elasticsearch,Fluentd 被稱為資料收集器,它可以從許多來源攝取日志,對其進行處理,并將其轉發到一個或多個目標,

相比之下,Promtail 的用例是專門為 Loki 量身定制的,它的主要操作模式是發現存盤在磁盤上的日志檔案,并將它們與一組標簽相關聯地轉發給 Loki,Promtail 可以為與 Promtail 運行在同一節點上的 Kubernetes pod 進行服務發現,充當容器邊車或 Docker 日志驅動程式,從指定檔案夾讀取日志,并跟蹤 systemd 日志,

Loki 通過一組標簽對表示日志的方式類似于 Prometheus表示指標的方式,當與 Prometheus 一起部署在環境中時,由于使用相同的服務發現機制,Promtail 的日志通常具有與應用程式指標相同的標簽,具有相同標簽的日志和指標使用戶能夠在指標和日志之間無縫切換背景關系,幫助進行根本原因分析,

Kibana 用于可視化和搜索 Elasticsearch 資料,并且在對這些資料進行分析方面非常強大,Kibana 提供了許多可視化工具來進行資料分析,例如位置圖、用于例外檢測的機器學習以及用于發現資料關系的圖形,警報可以配置為在發生意外情況時通知用戶,

相比之下,Grafana 專門針對來自 Prometheus 和 Loki 等來源的時間序列資料量身定制,儀表板可以設定為可視化指標(即將提供日志支持),并且可以使用瀏覽視圖對您的資料進行臨時查詢,與 Kibana 一樣,Grafana 支持根據您的指標發出警報,

 架構圖

收集日志的架構圖

轉載請在文章開頭附上原文鏈接地址: https://www.cnblogs.com/Sunzz/p/15190702.html

介紹Loki

Promtail:日志收集工具

Loki:日志聚合系統

Grafana:可視化工具

一、部署Loki

官網地址:GitHub - grafana/loki: Like Prometheus, but for logs.

1. loki

編輯loki組態檔  loki-config.yaml

參考:https://grafana.com/docs/loki/latest/configuration/examples/

https://grafana.com/docs/loki/latest/installation/docker/

 1 ---
 2 apiVersion: v1
 3 kind: ConfigMap
 4 metadata:
 5   name: loki-config
 6   labels:
 7     name: loki
 8 data:
 9   loki-config.yaml: |-
10     auth_enabled: false
11 
12     server:
13       http_listen_port: 3100
14       grpc_listen_port: 9096
15 
16     ingester:
17       lifecycler:
18         address: 127.0.0.1
19         ring:
20           kvstore:
21             store: inmemory
22           replication_factor: 1
23         final_sleep: 0s
24       chunk_idle_period: 5m
25       chunk_retain_period: 30s
26 
27       chunk_target_size: 1048576  # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first
28       max_transfer_retries: 0     # Chunk transfers disabled
29 
30     schema_config:
31       configs:
32       - from: 2021-08-18
33         store: boltdb
34         object_store: filesystem
35         schema: v11
36         index:
37           prefix: index_
38           period: 168h
39 
40     storage_config:
41       boltdb:
42         directory: /tmp/loki/index
43 
44       filesystem:
45         directory: /tmp/loki/chunks
46 
47     limits_config:
48       enforce_metric_name: false
49       reject_old_samples: true
50       reject_old_samples_max_age: 168h
51 
52       ingestion_rate_mb: 15
53 
54     chunk_store_config:
55       max_look_back_period: 0s
56 
57     table_manager:
58       retention_deletes_enabled: false
59       retention_period: 0s
kubectl apply -f  loki-config.yaml

創建Service 和StatefulSet, loki,.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: loki
  annotations:
    k8s.kuboard.cn/displayName: loki
    k8s.kuboard.cn/workload: loki
  labels:
    name: loki
spec:
  ports:
    - name: http
      port: 3100
      protocol: TCP
      targetPort: 3100
  selector:
    name: loki
 
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: loki
spec:
  serviceName: loki
  selector:
    matchLabels:
      name: loki
  template:
    metadata:
      labels:
        name: loki
    spec:
      volumes:
      - name: loki-config
        configMap:
          #defaultMode: 0640
          name: loki-config
      containers:
      - name: loki
        #image: grafana/loki:2.3.0
        image: grafana/loki:master
        args:
        - -config.file=/etc/loki/loki-config.yaml
        ports:
        - containerPort: 3100
          name: loki
          protocol: TCP
        volumeMounts:
        - name: loki-config
          mountPath: /etc/loki/
          readOnly: true

 執行命令創建:

kubectl apply -f loki.yaml

2.grafana

根據自己時間情可對存盤那塊進行更改,不改的話是emptyDir,你懂的,賬號密碼為admin/admin123.可自行修改

apiVersion: v1
kind: Service
metadata:
  name: grafana
  labels:
    k8s-app: grafana
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: 3000
  selector:
    k8s-app: grafana
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  labels:
    k8s-app: grafana
spec:
  selector:
    matchLabels:
      k8s-app: grafana
  template:
    metadata:
      labels:
        k8s-app: grafana
    spec:
     # initContainers:             ## 初始化容器,用于修改掛載的存盤的檔案夾歸屬組與歸屬用戶
     # - name: init-file
     #   image: busybox:1.28
     #   imagePullPolicy: IfNotPresent
     #   securityContext:
     #     runAsUser: 0
     #   command: ['chown', '-R', "472:0", "/var/lib/grafana"]
     #   volumeMounts:
     #   - name: data
     #     mountPath: /var/lib/grafana
     #     subPath: grafana
      containers:                
      - name: grafana             ## Grafana 容器
        #image: grafana/grafana
        image: grafana/grafana:7.4.3
        #securityContext:          ## 容器安全策略,設定運行容器使用的歸屬組與用戶
        #  fsGroup: 0
        #  runAsUser: 472
        ports:
        - name: http
          containerPort: 3000
          protocol: TCP
        env:                      ## 配置環境變數,設定 Grafana 的默認管理員用戶名/密碼
        - name: GF_SECURITY_ADMIN_USER
          value: "admin"
        - name: GF_SECURITY_ADMIN_PASSWORD
          value: "admin123"
        readinessProbe:           ## 就緒探針
          failureThreshold: 10
          httpGet:
            path: /api/health
            port: 3000
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 30
        livenessProbe:            ## 存活探針
          failureThreshold: 10
          httpGet:
            path: /api/health
            port: 3000
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        volumeMounts:            ## 容器掛載配置
        - name: data
          mountPath: /var/lib/grafana
          subPath: grafana
      volumes:                   ## 共享存盤掛載配置
      - name: data
        emptyDir: {}
        #persistentVolumeClaim:
        #  claimName: grafana     ## 指定使用的 PVC

3.promtail

應用結合 promtail,進行日志收集,

這里使用Sidecar模式,一個pod中跑兩個容器,一個為業務容器,一個為promtail,兩個容器掛載同一個存盤目錄,promtail即可收集日志,

編輯promtail-config.yaml ,可根據不同業務設定標簽,

參考: https://grafana.com/docs/loki/latest/clients/promtail/installation/

 1 ---
 2 apiVersion: v1
 3 kind: ConfigMap
 4 metadata:
 5   name: promtail-config
 6   labels:
 7     k8s-app: promtail
 8 data:
 9   promtail.yaml: |-
10     server:
11       http_listen_port: 9080
12       grpc_listen_port: 0
13     
14     positions:
15       filename: ./positions.yaml # This location needs to be writeable by Promtail.
16       #filename: /tmp/positions.yaml # This location needs to be writeable by Promtail.
17     
18     client:
19       url: http://loki:3100/loki/api/v1/push
20    
21     scrape_configs:
22     - job_name: system
23     #- job_name: busybox
24       static_configs:
25       - targets:
26           - localhost
27         labels:
28           job: varlog    #自定義
29           host: busybox  #自定義
30           __path__: /tmp/*log   收集日志的目錄
 1 ---
 2 apiVersion: apps/v1
 3 kind: Deployment
 4 metadata:
 5   name: promtail-deployment
 6 spec:
 7   replicas: 2
 8   selector:
 9     matchLabels:
10       name: promtail
11   template:
12     metadata:
13       labels:
14         name: promtail
15     spec:
16       volumes:
17       - name: log
18         emptyDir: {}
19       - name: promtail-config
20         configMap:
21           name: promtail-config
22 
23       containers:
24       - name: promtail
25         image: grafana/promtail:master
26         imagePullPolicy: IfNotPresent
27         args:
28         - -config.file=/etc/promtail/promtail.yaml
29         volumeMounts:
30         - name: log
31           mountPath: /tmp/
32         - name: promtail-config
33           mountPath: /etc/promtail/
34 
35       - name: busybox
36         image: centos:7
37         imagePullPolicy: IfNotPresent
38         args:
39         - /bin/sh
40         - -c
41         - "while : ; do echo '--- promtail log test ---' `date` && echo '--- promtail log test ---' `date` >> /tmp/healthy.log && sleep 3 ; done "
42         volumeMounts:
43         - name: log
44           mountPath: /tmp/

二、配置grafana并查看日志

查看grafana的nodeport埠 

kubectl get svc

瀏覽器輸入Node IP  + 上邊看到的port 打開grafana頁面 

 輸入賬號密碼進行登陸  admin  admin123

配置資料源

 找到loki,然后url處寫上loki的service name和埠號,即就是 http://locki:3100, 然后點擊頁面低下 "Save && test " 按鈕

 查看日志:

 選擇host 或者job來看不同業務的日志

 

 即可看到日志內容

轉載請在文章開頭附上原文鏈接地址: https://www.cnblogs.com/Sunzz/p/15190702.html

至此,Loki+Promtail+Grafana收集日志方案收工,

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296274.html

標籤:其他

上一篇:k8s使用kubeadm安裝kubernetes1.19版本(一)基礎環境配置和k8s集群初始化

下一篇:云原生愛好者周刊:你聽過 DevOps 元素周期表嗎?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more