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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
可观测可视化 Grafana 版,10个用户账号 1个月
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 日志管理是分布式系统,微服务架构中,经常使用的运维方案,可以提高问题定位速度,便于快速解决程序异常,找到程序缺陷。本文将从项目实践的角度总结提炼日志管理方案。 技术选型是ELK+Filebeat,最后将与上文的Loki+Promtail+Grafana选型方案进行优缺点比较,方便大家比较参考使用。

1、架构

选用流行的日志选型框架,Elasticsearch+Logstash+Kibana

  • Elasticsearch:存储日志,提供搜索功能
  • Logstash:监控,过滤,收集日志
  • Kibana : 提供web界面,支持查询,统计和图标展现

除了使用ELK之外,还采用Filebeat收集应用主机上的日志。

  •  Filebeat:一个轻量级开源日志文件数据搜索器,Filebeat读取文件内容,发送到Logstash进行解析后进入Elasticsearch,或者直接发送到Elasticsearch进行集中式存储和分析。

image.png    原理

  • Filebeat负责收集应用写到磁盘上的日志,并将日志发送给logstash。
  • logstash处理来自filebeat的日志,并将处理后的日志保存elasticsearch索引库。
  • elasticsearch存储来自logstash的日志。
  • kibana从elasticsearch搜索日志,并展示到页面。  

2、部署

本次测试验证采集测试环境2个应用的业务日志。

2.1、应用部署

为了简单,并且节省资源,elasticsearch、logstash、kibana全部部署在10.16.44.193主机上,在项目中使用本方案,可根据实际需求进行分布式节点扩展。

分别部署filebeat在2个被采集应用的主机上。

2.2、采集流程

      1)首先部署filebeat在应用主机,采集日志后将日志输出到193主机上的logstash

      2)logstash接收到filebeat传输的应用日志后,将日志再次输入到elasticsearch中

      3)kibana中配置elasticsearch信息

      4)在kibana页面检索日志

2.3、下载地址

  • Elasticsearch

下载地址:https://www.elastic.co/downloads/elasticsearch

版本号:7.14.1

  • Logstash

    下载地址:https://www.elastic.co/downloads/logstash

    版本号:7.14.1

  • Kibana

    下载地址:https://www.elastic.co/downloads/kibana

    版本号:7.14.1

  • Filebeat

下载地址:https://www.elastic.co/downloads/beats/filebeat

    版本号:7.14.1


3、配置

3.1、filebeat配置文件

filebeat.inputs:    - type: log   
    paths:       - /home/admin/taobao-tomcat-production-7.0.59.3/logs/catalina.out
output.logstash:   #logstash的IP:PORT    hosts: ["10.16.44.193:5044"]

3.2、logstash配置文件

input {#采用beats插件  beats {#监听5044端口    port => 5044
}}output {   elasticsearch {#elsaticsearch IP+PORT      hosts => ["10.16.44.193:9200"]#设置索引      index => "amc-log"}}

3.3、elasticsearch配置文件

# ======================== Elasticsearch Configuration =========================# ---------------------------------- Cluster -----------------------------------#是否开启跨域访问http.cors.enabled: true 
##跨域连接相关设置 http.cors.allow-origin: "*"http.cors.allow-headers: Authorization
cluster.name: Es-test
## ------------------------------------ Node ------------------------------------# Use a descriptive name for the node:node.name: test-1
node.master: true# ----------------------------------- Paths ------------------------------------# Path to log files:path.logs: /home/admin/es/logs
# ---------------------------------- Network -----------------------------------network.host: 0.0.0.0http.port: 9200# --------------------------------- Discovery ----------------------------------## Pass an initial list of hosts to perform discovery when this node is started:# The default list of hosts is ["127.0.0.1", "[::1]"]transport.tcp.compress: truediscovery.seed_hosts: ["10.16.44.193","10.16.44.194","10.16.44.195"]cluster.initial_master_nodes: ["test-1"]

3.4、kibana配置文件

# Kibana is served by a back end server. This setting specifies the port to use.server.port: 5601server.host: "10.16.44.193"# The Kibana server's name.  This is used for display purposes.server.name: "your-hostname"# The URLs of the Elasticsearch instances to use for all your queries.#设置elasticsearch主机ip+端口elasticsearch.hosts: ["http://10.16.44.193:9200"]# Kibana uses an index in Elasticsearch to store saved searches, visualizations and# dashboards. Kibana creates a new index if the index doesn't already exist.kibana.index: ".kibana"#设置elasticsearch用户名和密码 如果有的话#elasticsearch.username: "kibana_system"#elasticsearch.password: "pass"

注:此处展示的是其中一个应用的filebeat配置文件,另外一个应用的配置文件除了端口号不同,其余相同;logstash配置文件此处展示其中一个应用的,另外一个应用同理。

4、启动

filebeat:nohup ./filebeat -e -c filebeat.yml > filebeat.log &;tail -f filebeat.log

kibana:nohup ./kibana &

logstash:nohup ./logstash   &

elasticsearch:./elasticsearch


5、查看日志

  • 访问kibana页面:

          http://10.16.44.193:5601/

  • 创建索引

     选择右上角创建索引

输入索引名称,点击下一步,与elasticsearch中创建的索引匹配

  • 检索日志

   Discover查询索引下日志

image.png

 时间检索:@timestamp < "2021-12-15T10:55:59"

image.png

 关键字检索:610111111111111112112154656559

image.png

6、Loki和ELK日志方案的比较

优点

缺点

ES+Logstash+Filebeat+kibana

1、可实现更复杂的查询;

2、适合根据需求在kibana制作图表,更加可视化;

3、分片机制提供更好的分布性,将索引分割到不同容器或者分片中,可以存在单个节点或多个节点,在集群节点间平衡这些分片,为了更好地扩展索引和搜索负载;

4、分片高可用,一个分片可以设置多个复制,使得某台服务器宕机的情况下,集群仍旧可以照常运行,并会把由于服务器宕机丢失的复制恢复到其它可用节点上,复制每个分片提供数据备份,防止硬件问题导致数据丢失;

5、Kibana是ELK堆栈的一部分,用于数据分析和日志监视。

6、将收集端logstash替换为beats,更灵活,消耗资源更少,扩展性更强。同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。

1、Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患;Filebeat替换了Logstash,将Filebeat部署在应用端,Filebeat可以防止数据丢失,解决了logstash在系统中占用资源高的问题,但可能会发送重复。

2、ES存储内容最多,因此存储成本比较高

3、数据库字段太多,查询太慢,索引没有办法再做优化。

4、允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,操作苦难。很多功能往往用不上,大多数查询只关注一定时间范围和一些简单的参数(如host、service等),使用这些解决方案就有点杀鸡用牛刀的感觉了。

5、询消耗CPU资源高;

6、Kibana的仪表盘是公开的,没有进行基于角色的访问控制。如果你需要针对多个用户设置不同的权限级别,就得增加额外的配置预算采购 Shield了。

7、Kibana 旨在仅与 Elasticsearch 一起使用,因此不支持任何其他类型的数据源。

8、日志查询界面与服务器中日志展示的格式不一致,不直观

Loki+promtail+grafana

1、资源消耗少,轻便

2、Grafana 附带内置用户控制和身份验证机制,允许您限制和控制对仪表板的访问,包括使用外部 SQL 或 LDAP 服务器。此外,Grafana 的 API可用于保存特定仪表板、创建用户和更新数据源等任务。您还可以创建特定的 API 密钥并将它们分配给特定的角色。

3、使用了类似Prometheus的方式进行日志的匹配过滤,查询速度快;

4、只索引与日志相关的元数据标签 ,而日志内容则以压缩方式存储于对象存储中, 不做任何索引。相较于ES这种全文索引的系统,数据可在十倍量级上降低,加上使用对象存储,最终存储成本可降低数十倍甚至更低,

5、特别适合储存 Kubernetes Pod 日志。诸如 Pod 标签之类的元数据会被自动删除和编入索引;

6、Grafana 原生支持;

7、Grafana支持多数据源

8、日志查询界面与服务器的日志输出展示一致,更直观

9、Loki 允许多个租户使用单个 Loki 实例。不同租户的数据与其他租户完全隔离。通过在代理中分配租户 ID 来配置多租户。

10、Loki 在小范围内运行良好。在单进程模式下,所有需要的微服务都在一个进程中运行。单进程模式非常适合测试 Loki、在本地运行或小规模运行。Loki 还旨在为大规模安装进行横向扩展。Loki 的每个微服务组件都可以分解为单独的进程,并且配置允许对组件进行单独扩展。

1、 grafana中不支持loki的图表形式,只有log形式;

2、 受制于该工具比较新,很多地方还待完善。如dashboard对Loki的支持力度远远不够,基于Loki日志的告警目前也很不方便。


笔者正在尝试将项目日志方案替换为Loki+promtail+grafana,以上供大家参考。

THE END

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

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等