原创 吴就业 153 0 2024-03-26
本文为博主原创文章,未经博主允许不得转载。
本文链接:https://wujiuye.com/article/99264ca9c80640a6b3cc9c421567eeba
作者:吴就业
链接:https://wujiuye.com/article/99264ca9c80640a6b3cc9c421567eeba
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。
此为文章配套视频,如阅读本篇文章有不理解的地方,可观看此讲解视频!
前面两篇:如何获取Pod标准输出(stdout)日志,使用Grafana Agent收集,最后上传到Grafana Loki、如何获取Pod的CPU和内存指标,使用Grafana Agent收集指标,上传到Prometheus,其实是我按知识点拆分为两篇文章写的。
但通常这两者是一起的,可观测即离不开指标,也离不开日记。当两者都需要的时候,就没必要部署两个DaemonSet了。本篇将两者结合成一个完整的案例,大家可以直接拿去部署使用。
首先是DaemonSet:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: grafana-agent
spec:
selector:
matchLabels:
app: grafana-agent
template:
metadata:
labels:
app: grafana-agent
spec:
serviceAccountName: grafana-agent
containers:
- name: grafana-agent
image: grafana/agent:latest
command:
- grafana-agent
- -config.file=/etc/agent/agent.yaml
- -metrics.wal-directory=/tmp/metrics
- -config.expand-env # 使环境变量能够替换配置文件中的占位符'${xxx}'
env:
- name: HOSTNAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: METRICS_PORT
value: '10255'
- name: NODE_INTRANET_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
volumeMounts:
- name: config-volume
mountPath: /etc/agent
- name: pod-logs-volume
mountPath: /var/log/pods
- name: store-otherdata-volume
mountPath: /tmp
volumes:
- name: config-volume
configMap:
name: grafana-agent-config
- name: pod-logs-volume
hostPath:
path: /var/log/pods
- name: store-otherdata-volume
hostPath:
path: /tmp
其次是rbac授权:
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: grafana-agent
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: grafana-agent
rules:
- apiGroups:
- ""
resources:
- nodes
- nodes/proxy
- nodes/metrics
- services
- endpoints
- pods
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: grafana-agent
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: grafana-agent
subjects:
- kind: ServiceAccount
name: grafana-agent
namespace: default
最后是配置文件:
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-agent-config
data:
agent.yaml: |
server:
log_level: debug
metrics:
global:
scrape_interval: 1m
configs:
- name: agent
scrape_configs:
- job_name: kubelet-metrics-resource
metrics_path: /metrics/resource
static_configs:
- targets:
- "${NODE_INTRANET_IP}:${METRICS_PORT}"
remote_write:
- url: https://<你的prometheus的域名>/api/prom/push
basic_auth:
username: <用户名>
password: <密码>
logs:
configs:
- name: default
clients:
- url: https://<用户名>:<密码>@<你的Loki的域名>/loki/api/v1/push
positions:
filename: /tmp/logs/positions.yaml
scrape_configs:
- job_name: kubernetes-pods
pipeline_stages:
- cri: {}
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_node_name
target_label: __host__
- action: replace
source_labels:
- __meta_kubernetes_namespace
target_label: namespace
- action: replace
source_labels:
- __meta_kubernetes_pod_name
target_label: pod
- action: replace
source_labels:
- __meta_kubernetes_pod_container_name
target_label: container
- action: replace
source_labels:
- __meta_kubernetes_pod_host_ip
target_label: host_ip
- action: replace
target_label: __path__
source_labels:
- __meta_kubernetes_pod_uid
- __meta_kubernetes_pod_container_name
separator: /
replacement: "/var/log/pods/*$1/*.log"
关于每个配置项的解释,看前面两篇文章就好了。
声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。
本篇简单描述(Autopilot: workload autoscaling at Google)论文中描述的资源request预测算法,不需要理解论文中那复杂的数学公式。
前面《如何获取Pod的CPU和内存指标,使用Grafana Agent收集指标,上传到Prometheus》这篇介绍的指标获取只拿到了cpu使用率,怎么转成cpu使用量呢?
本篇是作者在云原生PaaS平台项目中实战可观测能力做的技术调研,将关键技术知识点讲透,涉及:如何获取Pod的cpu和内存指标、使用Grafana Agent收集指标、上传到Prometheus。
本篇是作者在云原生PaaS平台项目中实战可观测能力做的技术调研,将关键技术知识点讲透,涉及:如何获取Pod的标准输出(stdout)日志、如何使用Grafana Agent收集日志(附配置案例讲解)、如何将日志上传Grafana Loki。
不禁感叹,k8s这个底座设计的太牛了,我们不仅可以通过CRD + 控制器做扩展,还可以自定义APIService去做扩展。k8s,牛啊!
订阅
订阅新文章发布通知吧,不错过精彩内容!
输入邮箱,提交后我们会给您发送一封邮件,您需点击邮件中的链接完成订阅设置。