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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
可观测可视化 Grafana 版,10个用户账号 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 日志管理是分布式系统,微服务架构中,经常使用的运维方案,可以提高问题定位速度,便于快速解决程序异常,找到程序缺陷。本文将从项目实践的角度总结提炼日志管理方案。 技术选型是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日志并进行多维度分析。
目录
相关文章
|
3月前
|
Rust 前端开发 JavaScript
Tauri 开发实践 — Tauri 日志记录功能开发
本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。
135 1
Tauri 开发实践 — Tauri 日志记录功能开发
|
15天前
|
存储 数据采集 监控
云上数据安全保护:敏感日志扫描与脱敏实践详解
随着企业对云服务的广泛应用,数据安全成为重要课题。通过对云上数据进行敏感数据扫描和保护,可以有效提升企业或组织的数据安全。本文主要基于阿里云的数据安全中心数据识别功能进行深入实践探索。通过对商品购买日志的模拟,分析了如何使用阿里云的工具对日志数据进行识别、脱敏(3 种模式)处理和基于 StoreView 的查询脱敏方式,从而在保障数据安全的同时满足业务需求。通过这些实践,企业可以有效降低数据泄漏风险,提升数据治理能力和系统安全性。
云上数据安全保护:敏感日志扫描与脱敏实践详解
|
5天前
|
存储 监控 安全
网络安全视角:从地域到账号的阿里云日志审计实践
日志审计的必要性在于其能够帮助企业和组织落实法律要求,打破信息孤岛和应对安全威胁。选择 SLS 下日志审计应用,一方面是选择国家网络安全专用认证的日志分析产品,另一方面可以快速帮助大型公司统一管理多组地域、多个账号的日志数据。除了在日志服务中存储、查看和分析日志外,还可通过报表分析和告警配置,主动发现潜在的安全威胁,增强云上资产安全。
|
21天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
28天前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
64 4
|
2月前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
65 8
|
30天前
|
存储 运维 数据可视化
如何为微服务实现分布式日志记录
如何为微服务实现分布式日志记录
55 1
|
2月前
|
存储 数据采集 监控
云上数据安全保护:敏感日志扫描与脱敏实践详解
随着企业对云服务的广泛应用,数据安全成为重要课题。通过对云上数据进行敏感数据扫描和保护,可以有效提升企业或组织的数据安全。本文主要基于阿里云的数据安全中心数据识别功能进行深入实践探索。通过对商品购买日志的模拟,分析了如何使用阿里云的工具对日志数据进行识别、脱敏(3 种模式)处理和基于 StoreView 的查询脱敏方式,从而在保障数据安全的同时满足业务需求。通过这些实践,企业可以有效降低数据泄漏风险,提升数据治理能力和系统安全性。
|
3月前
|
Web App开发 存储 监控
iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
本文为 iLogtail 开源两周年的实践案例分享,讨论了 iLogtail 作为日志采集工具的优势,包括它在性能上超越 Filebeat 的能力,并通过一系列优化解决了在生产环境中替换 Filebeat 和 Logstash 时遇到的挑战。
141 14
|
4月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践