分布式系统日志管理实践(一)

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 日志管理是分布式系统,微服务架构中,经常使用的运维方案,可以提高问题定位速度,便于快速解决程序异常,找到程序缺陷。本文将从项目实践的角度总结提炼日志管理方案。技术选型是Loki+Promtail+Grafana;之后还会专门写一篇ELK方案以及二者的对比,方便大家比较参考使用。

1、为什么要用Loki+Promtail+Grafana:

项目采用微服务的架构,服务很多,每个服务都有自己的日志,分别存放在不同的服务器上。当查找日志时需要分别登录不同的服务器,有大量的请求的情况下,在日志文件中查找信息十分困难。想要搭建一个日志系统,ELK分布式日志系统对于中小型公司来说开发维护成本太高,经过调研,选择Loki轻量级日志系统。

2、Loki架构:

image.png

  • Promtail是代理,负责收集日志并将其发送给Loki。
  • Loki是主服务器,负责存储日志和处理查询。
  • Grafana用于查询和显示日志,UI显示。

简言之:只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Loki为数据源进行日志查询(如果Loki服务器性能不够,可以部署多个Loki进行存储及查询)。作为一个日志系统不光只有查询分析日志的能力,还能对日志进行监控和报警。

3、原理分析:

  • promtail收集并将日志发送给loki的 Distributor 组件
  • Distributor会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到Ingester
  • Ingester 接受日志流并构建数据块,压缩后存放到所连接的存储后端
  • Querier 收到HTTP查询请求,并将请求发送至Ingester 用以获取内存数据 ,Ingester 收到请求后返回符合条件的数据 ;
  • 如果 Ingester 没有返回数据,Querier 会从后端存储加载数据并遍历去重执行查询 ,通过HTTP返回查询结果

4、与 ELK 较优势

ELK虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,有点杀鸡用牛刀的感觉。

loki 不对日志进行全文索引。通过存储压缩非结构化日志和索引元数据,Loki 操作起来会更简单,更省成本。

通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。

安装部署简单快速,且受 Grafana 原生支持。


5、Linux部署

5.1、下载loki、promtail、Grafana

  • Loki:

下载地址:https://github.com/grafana/loki/releases

下载包:【loki-linux-amd64.zip】

版本:v2.4.1

  • Promtail:

下载地址:https://github.com/grafana/loki/releases

下载包:【promtail-linux-amd64.zip】

版本:v2.4.1

  • Grafana:

下载地址:https://dl.grafana.com/oss/release/grafana-7.1.0-1.x86_64.rpm

下载包:【grafana-7.1.0-1.x86_64.rpm】

版本:v7.1.0

目前线上部署的版本替换成了7.3

下载地址:https://dl.grafana.com/oss/release/grafana-7.3.0-1.x86_64.rpm

下载包:【grafana-7.3.0-1.x86_64.rpm】

版本:v7.3.0

注意:目前Grafana没有官方的汉化包,只有一些基于官网的汉化教程可参考。

5.2、在日志服务器上部署loki和Grafana

5.2.1 安装loki

  • 在日志服务器10.101.17 上创建目录:/home/admin/data、/home/admin/loki

image.png

  • 将 loki-linux-amd64.zip 解压后传到/home/admin/loki下
  • 将yaml 配置文件也上传到/home/admin/loki下,配置内容如下:
auth_enabled: falseserver:  http_listen_port: 3100ingester: # 配置ingester的生命周期如何运行,以及它将在哪里注册以进行发现  lifecycler:    address: 10.10.101.17 #部署loki服务器的ip    ring: # ring用于发现并连接到Ingesters      kvstore:        store: inmemory # 用于连接后端存储,支持的值有:consul etcd inmemory      replication_factor: 1 # 写入和读取的指数    final_sleep: 0s
  chunk_idle_period: 5m # 空闲时间  chunk_retain_period: 30s # 保留时间schema_config:  configs:  - from: 2021-07-01
    store: boltdb
    object_store: filesystem
    schema: v11
    index:      prefix: index_
      period: 168h   #每张表的时间范围7天storage_config:  boltdb:    directory: /home/admin/data/loki/index   #索引文件存储地址  filesystem:    directory: /home/admin/data/loki/chunks  #块存储地址limits_config:  enforce_metric_name: false  reject_old_samples: true  reject_old_samples_max_age: 168h
chunk_store_config:# 最大可查询历史日期 28天,这个时间必须是schema_config中的period的倍数,否则报错。只适用于即时日志  max_look_back_period: 672h
# 表的保留期28天table_manager:  retention_deletes_enabled: true  retention_period: 672h

5.2.2 启动loki

  • 在/home/admin/loki下,输入命令:
nohup ./loki-linux-amd64 -config.file=./config.yaml >./loki.log 2>&1 &

image.png

image.png

5.2.3 安装Grafana

  • 上传包到日志服务器10.101.17,路径:/home/admin

image.png

  • 执行命令:rpm -ivh  ./grafana-7.1.0-1.x86_64.rpm ,报错如下,没有插件依赖

image.png

  • 执行命令:yum install fontconfig urw-fonts -y加载插件(注意:该命令必须用root权限

image.png

image.png

  • 再次执行命令:rpm -ivh  ./grafana-7.1.0-1.x86_64.rpm(切换到admin账号后会报错,因为用rpm安装软件必须要用root权限)

image.png

如下图表示安装成功

image.png

5.2.4 启动Grafana

  • 输入命令:systemctl daemon-reload(需要用root权限),该命令重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,如果新服务的服务程序配置文件生效,需重新加载。

image.png

  • 使用root权限重新输入命令,如下图则表示启动成功

image.png

命令详解:

systemctl daemon-reload   #重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。systemctl enable grafana-server.service
systemctl start grafana-server.service    #服务启动systemctl status grafana-server.service   #服务状态查看

image.png

首次登录会弹出修改密码界面

image.png

image.png

  • 修改默认端口如下:/usr/share/grafana/conf/defaults.ini

image.png

image.png

5.3、在应用服务器部署 promtail

5.3.1 安装promtail

  • 在应用服务器 上创建目录(此处采集某应用开发环境日志)路径为:/home/datashare/basharingsrv/promtail
  • 解压【promtail-linux-amd64.zip】,然后在/home/datashare/basharingsrv/promtail下上传解压后的【promtail-linux-amd64】
  • 在/home/datashare/basharingsrv/promtail下上传配置文件yaml

image.png

  • 配置文件如下:
server:  http_listen_port: 9083  # 若部署多台服务器,端口不能重复使用  grpc_listen_port: 0positions:  filename: /home/datashare/basharingsrv/promtail/positions.yaml  # 记录读取日志的位置信息文件,Promtail重新启动时需要它clients:  - url: http://10.10.101.17:3100/loki/api/v1/push  ## Loki的api服务的地址scrape_configs:## dingtalk日志收集并打标签 - job_name: datasharesrv
   static_configs:   - targets:       - 39.99.197.216 #应用服务器ip   - labels:      job: datasharesrv
      host: 39.99.197.216  #应用服务器ip      __path__: /home/datashare/basharingsrv/taobao-tomcat-7.0.59/logs/catalina.out  #应用日志路径

5.3.2 启动promtail

启动命令:nohup ./promtail-linux-amd64 -config.file=./promtail.yaml > ./promtail.log 2>&1 &、

image.png

启动日志:

image.png

5.4、使用Grafana查看日志

5.4.1 配置数据源

image.png

image.png

image.png

image.png


出现如下提示,表示已连接数据源并找到标签。image.png

5.4.2 查看日志

image.png

在log_labels下面出现的filename、host、job就是在promtail中配置的

image.png

image.png查询语句详解:

{job="datasharesrv"}|~"库表"#匹配job=datasharesrv且包含库表{job="varlogs"}#匹配job=varlogs{job=~"datasharesrv|auth"}#匹配job=datasharesrv和job=auth{filename="/var/log/xx.log"}#按文件名匹配{job="varlogs"} |= "192.168.0.100"#匹配192.168.0.100机器的job=varlogs{job="datasharesrv"}|~"库表"

image.png

  • {filename="/home/datashare/basharingsrv/taobao-tomcat-7.0.59/logs/catalina.out"}|~"库表"

image.png

  • {host="39.99.197.216"}|~"库表生成"

image.png

the end

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
630 20
|
4月前
|
人工智能 安全 应用服务中间件
阿里巴巴 MCP 分布式落地实践:快速转换 HSF 到 MCP server
本文分享了阿里巴巴内部将大规模HSF服务快速转换为MCP Server的实践经验,通过Higress网关实现MCP协议卸载,无需修改代码即可接入MCP生态。文章分析了MCP生态面临的挑战,如协议快速迭代和SDK不稳定性,并详细介绍了操作步骤及组件功能。强调MCP虽非终极解决方案,但作为AI业务工程化的起点具有重要意义。最后总结指出,MCP只是AI原生应用发展的第一步,未来还有更多可能性值得探索。
1037 48
|
8天前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
36 1
|
4月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
1331 57
|
4月前
|
安全 JavaScript 前端开发
HarmonyOS NEXT~HarmonyOS 语言仓颉:下一代分布式开发语言的技术解析与应用实践
HarmonyOS语言仓颉是华为专为HarmonyOS生态系统设计的新型编程语言,旨在解决分布式环境下的开发挑战。它以“编码创造”为理念,具备分布式原生、高性能与高效率、安全可靠三大核心特性。仓颉语言通过内置分布式能力简化跨设备开发,提供统一的编程模型和开发体验。文章从语言基础、关键特性、开发实践及未来展望四个方面剖析其技术优势,助力开发者掌握这一新兴工具,构建全场景分布式应用。
474 35
|
5月前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
6月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
473 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
6月前
|
人工智能 运维 监控
领先AI企业经验谈:探究AI分布式推理网络架构实践
当前,AI行业正处于快速发展的关键时期。继DeepSeek大放异彩之后,又一款备受瞩目的AI智能体产品Manus横空出世。Manus具备独立思考、规划和执行复杂任务的能力,其多智能体架构能够自主调用工具。在GAIA基准测试中,Manus的性能超越了OpenAI同层次的大模型,展现出卓越的技术实力。
|
6月前
|
SQL 存储 自然语言处理
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
125 1
|
8月前
|
存储 运维 监控
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践
中信银行信用卡中心每日新增日志数据 140 亿条(80TB),全量归档日志量超 40PB,早期基于 Elasticsearch 构建的日志云平台,面临存储成本高、实时写入性能差、文本检索慢以及日志分析能力不足等问题。因此使用 Apache Doris 替换 Elasticsearch,实现资源投入降低 50%、查询速度提升 2~4 倍,同时显著提高了运维效率。
367 3
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践

热门文章

最新文章