Log Agent - Fluent Bit Output + Loki + Grafana

Fluent bit回顾
Log Agent - Fluent Bit 简介
Log Agent - Fluent Bit 安装与常见架构模式
Log Agent - Fluent Bit Service配置与内建 API
Log Agent - Fluent Bit Input元件 与 Tail浅谈
Log Agent - Fluent Bit Parser元件
Log Agent - Fluent Bit Multiline Parsing

日志收集显示系统 Grafana + Loki

Day20分布式可观测性 Logging 浅谈时,
我们曾提到Grafana家族有Grafana + Loki, 能用来存放与展示Log.
这两个元件的介绍, 日後有机会在深入.
今天先来使用这两个元件加上Fluent Bit收集到的Log, 来做展示跟搜寻.

先透过Docker Compose快速建立Grfana + Loki

version: '3'
services:
  loki:
    image: grafana/loki:2.3.0
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false

执行启动
docker-compose up -d

登入Grafana後, 左边菜单选择Configuration->Data Sources->Add data source
然後在URL输入http://loki:3100/
按下Save & Test
出现Data source connected and labels found.表示Grafana成功连上Loki

Fluent Bit - Output

Fluent Bit在Output上也提供非常多的Plugins,
能输出到像是Prometheus、CloudWatch、Datadog,Elasticsearch...

这里因为我们目标是把Fluent Bit收集到的Log, 写到Loki做储存
所以这里选择Loki这Output Plugin

Parameters

  • host
    • Loki的hostname或是IP
    • 预设是127.0.0.1
  • port
    • Loki的TCP port
    • 预设是3100
  • labels
    • 就自己添加定义的label_key=value
    • 我自己比较常用来把主机名称给加在这
  • line_format
    • 就送到Loki时的格式, 有JSON和KVP
    • 预设是JSON

加入Loki的Output进去

[OUTPUT]    
    name                   loki    
    match                  *    
    host                   loki   
    port                   3100    
    labels                 job=demo        

启动FLuent BIt後
我们来到Grafana左边选单的Explore这里
左上角选择Loki
https://ithelp.ithome.com.tw/upload/images/20211014/20104930XmV9IhaJdA.png

来到Log browser会看到job有出现刚刚的demo这label, 选择demo, 然後选择show logs
https://ithelp.ithome.com.tw/upload/images/20211014/20104930mgrT5M8gT8.png

就会看到上一篇的Log出现在此了.
然後来简单介绍一下Log搜寻语法 LogQL

LogQL

LogQL => Log Query Language

Log Pipeline

LogQL也有类似Linux Pipe管线的概念
|
command1 | command2 | command3
後面的command收到的输入都是前一个command的输出结果

也能来用反向来过滤
!

Log FIlter Expression

刚刚的Pipe加上Filter就能达到过滤或比对的功能
符号就2种=~

  • =用来表示包含该字串
  • ~用来表示後面的字串其实是Regex pattern

我们把两者合并

  • |= Log包含该字串
    https://ithelp.ithome.com.tw/upload/images/20211015/20104930tTGe32EFvY.png
  • != Log内不包含ㄍ字串
    https://ithelp.ithome.com.tw/upload/images/20211015/20104930GLCdDREXww.png
  • |~ Log内能匹配到这Regex
  • !~ Log的结果不包含这Regex所匹配到的

还有很多玩法, 能参考LogQL官网

本日心得

就是Fluent Bit + Loki + Grafana真的是很强大的一套分布式可观测性Log服务
加上现在SRE或运维其实也很多都用Grafana,
如果Log也能用同一套展示面板, 其实在管理设定与学习上就简单多了.
不过Fluent Bit + Loki + Grafana相对於ELK来说可能没那样稳定, 毕竟才出来市场相对没那麽久.
但这套相对於ELK所吃的记忆体就真的少很多了

Fluent Bit真的是很不错的服务, K8S也有用这个在收集跟处理各容器的Log, 几乎常见的场景都适用.
期待大家一起把玩, 一起分享与学习.


挑战心得

今年的铁人赛挑战到此完成了.
刚转换工作, 很多还在适应与学习. 脱离了习惯已久的开发环境与工具.

今年到最後一天才决定开赛. 虽然每天都面离断赛危机.
就每天硬着头皮下班开始开官网学习, 并写成文章.
这次很多部份不够详细与深入, 接着一年的时机要继续深入学习.

感谢各位的阅读.
明年再见/images/emoticon/emoticon08.gif


自己的笔记

Grafana

Viewer权限的帐号如果想看到Expolre工具, 需要在config开启viewers_can_edit
configuration-viewers-can-edit


<<:  找LeetCode上简单的题目来撑过30天啦(DAY30)

>>:  完赛!YA!关於 Vue.js 进阶心法系列

【在 iOS 开发路上的大小事-Day12】好用的 CocoaPods 套件-IQKeyboardManagerSwift

前情提要 在开发 App 的时候,有遇过键盘开启的时候,TextField 却被挡住无法输入的情况吗...

【Day 21】React 关於 Hook

前言 React hook 是 React V16.8 新增的功能,它改变了 React 写 Cla...

Day2 介绍网页的基础架构

要开始写网页之前,首先要了解到网页是如何形成的,其实网页形成非常的简单,透过网页浏览器(google...

[DAY-06] 开始减少控制 废除差旅和费用规定

规则和政策总是无法照顾到所有情况 现实生活有太多细微的差异 政策再怎麽缜密也追不上 花公司的钱 就...

[Day06] TS:整合前几天所学,来写个 Generic Functions 吧!

这几天的内容中,我们已经学到了几个重点: 泛型(generics)的使用 使用 extends 限制...