EP26 - EKS 日志蒐集使用 Loki 和 Grafana(二)

因为昨天发现我们在有个设定似乎有些问题
造成 Grafana 无法启动
所以先将 values.yaml 的 pvc 注解起来

grafana:
  enabled: true
  sidecar:
    datasources:
      enabled: true
  # persistence:
  #   enabled: true
  #   type: pvc
  #   existingClaim: efs-grafana-claim
  image:
    tag: 7.5.0

然後再下一次更新

helm upgrade -f values.yaml grafana . --namespace=grafana

为 Grafana 配置 Ingress

这里我们不使用 helm 来建立 ingress
主要原因还是 enable 後设定完
会是 apiversion 是 apiVersion: networking.k8s.io/v1
这会让网页的设定怪怪的
关於已经将程序码 pull 下来
但这里我还不知道要怎麽修改比较好QQ
所以 ingress 的部分就还是另外建立 yaml 档来 apply

ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: grafana-ingress
  namespace: grafana
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/wafv2-acl-arn:  "arn:aws:wafv2:ap-northeast-1:776212102166:regional/webacl/fundamental-acl/e571dcd7-ea0b-41fa-90db-f853d884e951"
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/healthcheck-path: '/'
    alb.ingress.kubernetes.io/subnets: 'subnet-00280de34952ba84c, subnet-058594e4949f7e8de, subnet-053a83439089c2886'
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/certificate-arn: "arn:aws:acm:ap-northeast-1:776212102166:certificate/28b6cabd-85d6-498c-aa91-1e4cd239dd3d"
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'

spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: ssl-redirect
              servicePort: use-annotation
          - path: /*
            backend:
              serviceName: grafana
              servicePort: 80
kubectl apply -f ingress.yaml

拿到登入密码

kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

https://ithelp.ithome.com.tw/upload/images/20211008/20141518VvK6fsgjme.png

设定 Grafana

登入

https://ithelp.ithome.com.tw/upload/images/20211008/20141518HNdAb78YHh.png

确认 datasource

齿轮图案的第一个选项
就是 datasource

https://ithelp.ithome.com.tw/upload/images/20211008/20141518W9spu5ErTu.png

Grafana 支援各种资料来源
而 Loki 只是其中一种
可以看到预设已经帮我们加进去了
https://ithelp.ithome.com.tw/upload/images/20211008/20141518mRXAhbgWqJ.png

新增 Dashboard

左侧+可新增 Dashboard
https://ithelp.ithome.com.tw/upload/images/20211008/201415180DjXf3I5V4.png

选择 Add an empty panel
https://ithelp.ithome.com.tw/upload/images/20211008/20141518AjMnVlmf9K.png

如果要显示 Log 的话
右边的 Visualization 选择 Logs
并在下方查询方法中输入 json {namespace="ithome-ironman"}
可根据 namespace、pod、service 去查找 Log
https://ithelp.ithome.com.tw/upload/images/20211008/20141518fMlI3OXbPg.png

按下 Save 储存
https://ithelp.ithome.com.tw/upload/images/20211008/20141518x2zqhoGYXx.png

最後再按下磁碟片图案 Save Dashboard 即可储存
https://ithelp.ithome.com.tw/upload/images/20211008/20141518zHYoJ65jte.png

因为当初部署的专案只是个简单的 initial 专案
尚未配置任何的 Log 可供显示
因此目前查无资料是正常状况

添加 DNS 纪录

刚刚我们建立完 Ingress 资讯後
在 EC2 的负载平衡器就会出现 load balance
此时我们就可以在自己的 DNS 添加一笔 CName Record 指向负载平衡器

关联服务

写在这里其实有点奇怪
但,昨天就是忘了写只好写在这里

简单来说
我们用了 Grafana、Promtail 和 Loki 三个服务
只是透过 Helm Repository
帮我们把这些包好
功能开关及设定都参数化
让我们可以很轻易的就将整个服务进行更版

Grafana

一个仪表板服务
整合各种 datasource
从自家的 Loki、各大厂的资料库
到 Azure Monitor 和 AWS CloudWatch 都有支援
觉得资料库权限不好卡
或是云端供应商的 IAM 不好设定
不妨建立一个 Grafana 来接这些 Datasource
这样可以只让相关人士看到需要的资讯

Loki

就...会自动帮你把 Log 建立起来做索引
最後当 Datasource 来让 Grafana 捞取资料

Promtail

会采集 K8S 环境中的 Log
并转发到 Loki 里面

其他设定

在部分情境的使用上
我们可能不见得会仰赖帐密
可能会使用 O365 或是 ldap 登入
我们如果将原始码 pull 下来
就可以直接修改这设定了

/loki-stack/charts/grafana/values.yaml
搜寻 grafana.ini
在这区块以下可以设定 Azure AD OAuth 登入
你没看错是 OAuth
不是 SAML Fedaration
所以实际上它在登入时会建立新的使用者


虽然我们不如预期
没办法将 EFS 挂载在 EKS 上
但所幸我们还是将 Grafana 架起来
并建立 Dashboard
明天老实说我还不知道要写什麽
目前最後一哩路
大概就差 CloudWatch 和之前未填的坑

参考资料:

  1. Azure AD OAuth2 authentication
  2. LDAP Authentication
  3. 日志系统 Loki - Promtail 详解

<<:  Day 24 -资料库应用小程序 资料库设计(实体关联模型(E-R model)分析)

>>:  Day 23 - 开发人员工具的日常

Day 23 Selenium模组二

今天的影片内容为介绍selenium的webdriver物件用来寻找网页元素的方法 其实跟Beaut...

【Day14】[资料结构]-二元树走访Binary Tree Traversal

二元树走访或称二元树遍历,简单来说就是走访树中各节点,转化为线性关系。 主要分成两种策略方式 深度优...

简报版-第十一章-从网址看问题,短网址的风险?真实网域的辨别?

其实原本最初规画想要做Index方式的纪录,然後多增加一些没写到的面向 不过,总是计画赶不上变化 ...

[经典回顾]知名通讯软件过度存取用户资讯事件

老议题+最近新闻 厂商的说法 iOS系统为App开发者提供相簿更新通知标准能力,相簿发生内容更新时会...

D-12, Ruby 正规表达式(二) 量词 、锚 && Reverse Vowels of a String

昨天的重点复习/./就是一个最简单的正规表达式。 先认识一下match与=~。 match回传匹配的...