中小項目用ELK做日志?我準備玩點新花樣

      網友投稿 877 2025-04-02

      項目做正規了,日志系統是少不了的。目前大部分日志平臺推薦基于ELK構建,不過ELK算是比較重了,架構太大,中小項目不太好Hold住,希望找一款簡單一些的,如果實在找不到再上ELK。之前儲備了一些技術候選庫,翻了翻果然有一款名叫Loki的日志系統,可百度大部分都是電影里的這貨,不靠譜?


      Loki

      事實上日志系統的開發團隊靠譜的很,就是監控領域大名鼎鼎的Grafana Labs,為人所熟知的有開源數據可視化工具Grafana、監控系統prometheus等等。

      Loki是他們受 prometheus 啟發打造的開源項目,是一款可擴展,高可用,支持多租戶的日志聚合系統。設計的理念就是為了讓日志聚合更簡單,它被設計為非常經濟高效且易于操作。它不索引日志的內容,而是為每個日志流設置一組標簽。它主要由三部分組成:

      Promtail是日志收集器,負責收集應用的日志并發送給Loki。

      Loki用于日志的存儲和解析,并提供查詢API給下游展示。

      Grafana負責將Loki的日志可視化。

      看上去挺不錯的,我要試一試。

      簡單上手

      遇到新東西先跑個小DEMO,說實話目前國內介紹這個的都沒有詳細的上手DEMO,尤其是和Spring Boot對接這一塊。我照著原版文檔,花了小半天終于跑成功了。

      Loki安裝

      首先是安裝,現在跑DEMO我優先選擇快捷方便的Docker。下面是我修改過的Docker Compose腳本,根據你自己的需要改改就能一鍵啟動Loki。

      version:?"3"

      networks:

      loki:

      services:

      loki:

      image:?grafana/loki:2.2.1

      container_name:?loki-service

      volumes:

      #????將loki的配置文件掛載到本地?c:/docker/loki?目錄

      -?c:/docker/loki:/etc/loki/

      ports:

      -?"3100:3100"

      command:?-config.file=/etc/loki/loki.yml

      networks:

      -?loki

      promtail:

      image:?grafana/promtail:2.2.1

      container_name:?promtail-service

      volumes:

      #??為了讀取本地的日志目錄,這個是個默認配置目的就是為跑起來,生產肯定不是這樣的。

      -?c:/docker/log:/var/log/

      #??promtail??的配置文件也掛載到本地?c:/docker/promtail目錄

      -?c:/docker/promtail:/etc/promtail/

      command:?-config.file=/etc/promtail/promtail.yml

      networks:

      -?loki

      grafana:

      image:?grafana/grafana:latest

      container_name:?grafana-service

      ports:

      -?"3000:3000"

      networks:

      -?loki

      上面的掛載目錄c:/docker/loki和c:/docker/promtail你根據自己的情況調整位置。

      Loki的配置

      上面文件中的-config.file=/etc/loki/loki.yml是Loki的配置文件,我們需要將配置文件loki.yml提前放在c:/docker/loki下,我使用默認配置:

      auth_enabled:?false

      server:

      http_listen_port:?3100

      ingester:

      lifecycler:

      address:?127.0.0.1

      ring:

      kvstore:

      store:?inmemory

      replication_factor:?1

      final_sleep:?0s

      chunk_idle_period:?1h???????#?Any?chunk?not?receiving?new?logs?in?this?time?will?be?flushed

      max_chunk_age:?1h???????????#?All?chunks?will?be?flushed?when?they?hit?this?age,?default?is?1h

      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

      chunk_retain_period:?30s????#?Must?be?greater?than?index?read?cache?TTL?if?using?an?index?cache?(Default?index?read?cache?TTL?is?5m)

      max_transfer_retries:?0?????#?Chunk?transfers?disabled

      schema_config:

      configs:

      -?from:?2020-10-24

      store:?boltdb-shipper

      object_store:?filesystem

      schema:?v11

      index:

      prefix:?index_

      period:?24h

      storage_config:

      boltdb_shipper:

      active_index_directory:?/loki/boltdb-shipper-active

      cache_location:?/loki/boltdb-shipper-cache

      cache_ttl:?24h?????????#?Can?be?increased?for?faster?performance?over?longer?query?periods,?uses?more?disk?space

      shared_store:?filesystem

      filesystem:

      directory:?/loki/chunks

      compactor:

      working_directory:?/loki/boltdb-shipper-compactor

      shared_store:?filesystem

      limits_config:

      reject_old_samples:?true

      reject_old_samples_max_age:?168h

      chunk_store_config:

      max_look_back_period:?0s

      table_manager:

      retention_deletes_enabled:?false

      retention_period:?0s

      ruler:

      storage:

      type:?local

      local:

      directory:?/loki/rules

      rule_path:?/loki/rules-temp

      alertmanager_url:?http://localhost:9093

      ring:

      kvstore:

      store:?inmemory

      enable_api:?true

      不要糾結這些配置項是干什么的,先跑起來再說,用到了去查文檔,要有的放矢。

      Promtail的配置

      和Loki類似,Promtail也要在本地掛載的c:/docker/promtail目錄下配置promtail.yml,這里也使用默認配置:

      中小項目用ELK做日志?我準備玩點新花樣

      server:

      http_listen_port:?9080

      grpc_listen_port:?0

      positions:

      filename:?/tmp/positions.yaml

      clients:

      -?url:?http://loki:3100/loki/api/v1/push

      scrape_configs:

      -?job_name:?system

      static_configs:

      -?targets:

      -?localhost

      labels:

      job:?varlogs

      #?這個跟掛載的位置有點關系,你可以猜猜

      __path__:?/var/log/*log

      我猜測/var/log/*log就是讀取日志的位置,所以我把它掛載到本地c:/docker/log,等下弄點日志到本地這個目錄下,看看能讀取出來不。

      啟動Loki

      配置完畢后執行docker-compose -f up命令,會先下載鏡像然后啟動三個Docker容器。成功后打開http://localhost:3000/登錄Grafana,默認賬號密碼是admin/admin。然后在側邊欄添加數據源為Loki:

      然后配置Loki的URL為http://loki:3100,然后點確定和測試,有綠色提示就表示成功了。

      我們使用的是Docker Compose,因此hostname是服務名稱loki。

      然后點擊側邊欄一個指南針形狀的圖標Explore,就進入日志的UI了,這時候啥也沒有。

      得造點日志,搞一個Spring Boot應用,然后在application.yml中配置日志選項,然后啟動應用生成一些日志。

      logging:

      file:

      #?弄到疑似Promtail的日志讀取路徑試試

      path:?c:/docker/log

      level:

      org:?debug

      然后我輸入了一個從文檔中找到的查詢日志的表達式(Loki query){filename="/var/log/spring.log"}, 文件名稱去c:/docker/log下看,有了有了!Nice!

      總結

      今天從零演示了Spring Boot對接日志新貴Loki,看上去還真不錯。學習新東西,要清楚它的場景,要清楚自己每一步的目標,先跑起來DEMO,再去研究定制化,最后才是底層原理。你學得越多就越熟練,你學得越多就越知道自己的短板,才能有目標和方向,不要盲目學,更不要過于追求底層原理。好了,后面我會繼續研究探索Loki如何在生產環境的實際運用,請持續關注:碼農小胖哥,也請,轉發,給個鼓勵。

      如何在代碼中獲取Java應用當前的版本號?

      2021-05-11

      抱怨Swagger不好用?好吧我換一個好用的

      2021-05-10

      Docker

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:可能抑制云增長的做法
      下一篇:如何刪除或修改Excel2003行號列標的字體(怎么統一刪除excel里數字前的文本符號)
      相關文章
      亚洲精品天堂在线观看| 亚洲精品无码久久久久AV麻豆| 亚洲一区爱区精品无码| 亚洲不卡AV影片在线播放| 国产亚洲人成在线播放| 亚洲高清一区二区三区电影| 亚洲中文字幕AV每天更新| 亚洲永久中文字幕在线| 亚洲国产av高清无码| 亚洲成aⅴ人片在线观| 91亚洲精品麻豆| 亚洲美女视频免费| 亚洲欧洲日韩在线电影| 久久丫精品国产亚洲av不卡| 久久久久久久久亚洲| 亚洲av中文无码乱人伦在线播放| 亚洲一区二区三区在线观看精品中文| 红杏亚洲影院一区二区三区| 亚洲中文久久精品无码ww16| 国产亚洲一区二区在线观看| 亚洲AV无码久久精品色欲| 亚洲国产精品国自产电影| 久久亚洲中文字幕精品有坂深雪 | 亚洲一区无码中文字幕乱码| 亚洲国产高清美女在线观看| 亚洲同性男gay网站在线观看| tom影院亚洲国产一区二区| 亚洲 欧洲 视频 伦小说| 亚洲成av人片在线天堂无| 精品亚洲国产成人av| 亚洲AV伊人久久青青草原| 久久亚洲中文字幕精品一区| 亚洲精品国精品久久99热一| 亚洲综合国产精品| 亚洲乱码一二三四区国产| 亚洲一卡2卡三卡4卡无卡下载| 在线观看亚洲免费| 国产亚洲色婷婷久久99精品91| 亚洲午夜无码久久久久| 亚洲国产精品VA在线看黑人 | 日批日出水久久亚洲精品tv|