网站首页 > 精选文章 / 正文
Loki是一个水平可扩展,高可用性,支持多租户的日志聚合系统,使用了和 Prometheus 相同的服务发现机制,将标签添加到日志流中而不是构建全文索引,而是为每个日志流编制一组标签。
Grafana 是一个用于监控和可视化观测的开源平台,支持非常丰富的数据源,支持Prometheus 和 Loki 等数据源的时间序列数据。
Grafana和Loki的组合使得我们日志收集聚合简单高效,而且查看起来更接近在控制台实时查看日志。
Loki由3个组成部分组成:
- loki 是主服务器,负责存储日志和处理查询。
- promtail 是代理,发现采集目标以及给日志流添加上 Label 标签,然后发送给 Loki,也可以选择fluent-bit。
- 用户界面的Grafana。
部署方式
由于我们服务有同时运行在k8s集群上和ECS服务器上,所以规划Loki server使用helm部署在k8s中,grafana也部署在k8s中,promtail部署在k8s和其他ECS服务器上以docker方式运行。
Loki和grafana通过ingress暴露服务。
1. 安装helm
wget https://get.helm.sh/helm-v3.3.4-linux-amd64.tar.gz
tar zxf helm-v3.3.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
helm version # 查看helm 版本
添加Loki源
helm repo add loki https://grafana.github.io/loki/charts && helm repo update
helm search repo loki
2.创建PVC
为了使Loki数据持久化,k8s集群需要准备好StorageClass,这里使用了阿里云的Default StorageClass
执行以下命令将StorageClass (alicloud-disk-efficiency)配置为一个Default StorageClass。
kubectl patch storageclass alicloud-disk-efficiency -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
kubectl get sc
创建PVC
注,在阿里云k8s设置了Default StorageClass后可以不指定StorageClass,但其他情况需要指定
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: loki-server-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
集群会自动创建一个云盘卷(PV),且配置了Default StorageClass(alicloud-disk-ssd)。
kubectl get pvc
3. 下载Loki并改造
helm fetch loki/loki
编辑 loki/value.yaml修改配置
14 enabled: true
19 - host: loki.k8s.example.com # 开启ingress, ingress域名
20 paths: ['/loki/api/v1/push']
72 ingestion_rate_mb: 32
121 enabled: true #开启持久化存储
129 existingClaim: loki-server-pvc # 为之前创建的PVC
左侧为value.yaml的行数
4. 安装Loki
helm install loki-server ./loki # 指定release的名称
5.在k8s上安装promtail
安装日志采集端在k8s中
helm install promtail loki/promtail --set "loki.serviceName=loki-server" # 要指定loki-server的名称
6. 安装grafana
grafana.yml如下
kind: Deployment
apiVersion: apps/v1beta2
metadata:
labels:
app: grafana
name: grafana
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
securityContext:
runAsUser: 0
containers:
- name: grafana
image: grafana/grafana:latest
imagePullPolicy: IfNotPresent
env:
- name: GF_AUTH_BASIC_ENABLED
value: "true"
- name: GF_AUTH_ANONYMOUS_ENABLED
value: "false"
readinessProbe:
httpGet:
path: /login
port: 3000
ports:
- containerPort: 3000
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: grafana-service
labels:
app: grafana
spec:
ports:
- port: 3000
name: grafana
targetPort: 3000
selector:
app: grafana
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: grafana-public-ingress
#annotations:
# kubernetes.io/ingress.class: shujiajia-public-ingress
spec:
rules:
- host: grafana.k8s.example.com # 注意修改为自己的域名
http:
paths:
- backend:
serviceName: grafana-service
servicePort: 3000
登入 Grafana,添加 Loki 作为数据源,如:http://loki-server:3100。添加之后,就可以点击 Explore 按钮,然后根据label选择不同服务查看日志了。
7. 在其他服务器上安装promtail进行日志收集
安装日志采集端在服务器上-docker方式
配置文件如下:cat config.yml
server:
http_listen_port: 0
grpc_listen_port: 0
positions:
filename: /etc/promtail/positions.yaml # 游标记录上一次同步位置
sync_period: 10s #10秒钟同步一次
clients:
- url: http://loki.k8s.example.com/loki/api/v1/push # 替换为自己的Loki server的地址,ingress暴露的地址
scrape_configs:
- job_name: gateway
static_configs:
- targets:
- localhost
labels:
# 自定义标签
app: gateway
__path__: /data/logs/*/*.log # 需要收集的日志目录,支持正则匹配
启动
docker run -d --name promtail \
-v /data/apps/promtail:/etc/promtail \
-v /data/logs:/data/logs \
grafana/promtail
注意,由于是docker方式运行,所以需要把配置文件目录和服务运行的日志目录进行挂载,如果目录下有多个日志,比如error.log和log.log,Loki会对日志进行聚合显示。
8.升级/更新loki
helm upgrade --install loki-server ./loki
查看日志
Tags:grafana 安装
猜你喜欢
- 2024-12-06 企业级资源监控方案落地:Prometheus+Grafana+Export
- 2024-12-06 一文了解springboot+micrometer+prometheus+grafana监控系统
- 2024-12-06 Prometheus之Grafana可视化
- 2024-12-06 性能测试之 grafana 监控平台
- 2024-12-06 Prometheus + Grafana监控搭建
- 2024-12-06 运维监控一样可以炫酷:Grafana展示Zabbix监控数据
- 2024-12-06 轻量级日志分析平台Loki实战
- 2024-12-06 Telegraf+Influxdb+Grafana 轻量级监控系统部署
- 2024-12-06 记录grafana整合zabbix实现美观度较高的可视化监控
- 2024-12-06 prometheus+grafana可视化监控部署记录