prometheus|云原生|轻型日志收集系统loki+promtail的部署说明

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: prometheus|云原生|轻型日志收集系统loki+promtail的部署说明

一,

日志聚合的概念说明

  • 日志------

每一个程序,服务都应该有保留日志,日志的作用第一是记录程序运行的情况,在出错的时候能够记录错误情况,简单来说就是审计工作,例如nginx服务的日志,kubernetes集群的pod运行日志,Linux系统的系统日志。

其次是数据库的日志,记录数据库的运行细节,在需要的时候通过日志回溯数据库动作,比如MySQL数据库的binlog日志,这类日志比较特殊,基本没有聚合的意义。

  • 日志聚合----

指的是将分散在各个服务器上的日志统一一个入口程序来查看其内容,并可通过关键字或者正则表达式搜索特定的管理人员感兴趣的内容,例如,efk日志系统,elastisearch负责将分散的日志收集,flueed将es收集的日志进行预处理以符合我们的审计工作需求,最终通过kibana这个web界面查看这些分散于各个服务器的日志,以提高管理服务器的效率,毕竟,日志没有聚合的时候,我们是需要每个服务器都登陆,然后找到相应的日志文件,打开日志文件,检索需要的内容这样一个复杂的流程,而聚合日志后,通过特定标签就可以查询检索到我们需要的信息了。

那么,现在的常用日志聚合系统有elk,efk,毫无疑问的,这些系统是比较重的,复杂的(架构复杂,所以维护管理也复杂,在系统出现问题的时候会比较难以判断,解决),而这些无疑是会提高我们的使用门槛的,毕竟,如果是在生产上,我们可能希望这个日志系统是稳定高效的,那么,es可能就需要以集群的架构来部署,f或者l可能也需要集群的架构,而集群的维护和管理工作这些都限制了我们使用的欲望。

OK,有没有一个相对elk这样的日志系统更为简单的,查询效率更高的日志系统呢?答案当然是   ---必须有,loki+promtail+grafana基本可以满足中小企业的日志聚合功能。

那么,本文将就loki+promtail+grafana这个日志聚合系统的部署和简单使用做一个尽量详尽的介绍。

二,

架构说明

日志收集器---promtail ,负责将需要聚合的日志发送到loki,通常每个日志节点都需要安装

日志处理器---loki,负责将promtail推送过来的日志打上特定标签,管理这些聚合到的日志,应用层的服务,带有api,通常只安装这么一个服务

日志展示部分---grafana,展示数据,也就是web端展示,日志的内容统一暴露接口,通常只安装这么一个服务

本文使用的是centos7操作系统

三,

部署方式

部署方式非常多,helm,kubernetes内集成yaml清单形式,二进制,rpm安装包形式,docker容器形式都可以,本文主要是二进制的方式安装

二进制方式安装部署的优点是部署简单,方便,形式灵活,可深度定制

四,

二进制安装包的获取

百度网盘下载地址:链接:https://pan.baidu.com/s/1XKqwdJrrYYewsAcy8foQ5Q?pwd=kkey
提取码:kkey

或者在github官网下载,地址为:

Releases · grafana/loki · GitHub

五,

loki的部署

相关介质上传到服务器上后,解压,编写配置文件,文件内容如下:

cat >loki-cfg.yaml<<EOF
auth_enabled: false
server:
  http_listen_port: 13100   #http监听端口,代理服务(promtail)会向此端口发送日志流
  grpc_listen_port: 9086   #grpc监听端口,简单部署不用管
ingester:
  lifecycler:
    address: 192.168.123.11
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s
  max_transfer_retries: 0
schema_config:
  configs:
    - from: 2023-12-02 #2023-12-02之后loki信息用下面的配置,这个主要是用来做兼容的
      store: boltdb  #索引使用哪种存储
      object_store: filesystem  #怎么存储,简单部署的话保存在本地文件系统
      schema: v11
      index:
        prefix: index_
        period: 24h #索引期限24小时
storage_config:
  boltdb:
    directory: /tmp/loki/index
  filesystem:
    directory: /tmp/loki/chunks
limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h
  ingestion_rate_mb: 32  #采集速率
  ingestion_burst_size_mb: 64 #单次采集大小
  max_entries_limit_per_query: 0  #查询返回的条目的最大行数,默认是5000,0表示无限制
  retention_period: 24h #全局保留期,超过这个时间的日志会被删除,具体删除规则在compactor里配置
  #retention_stream: #局部保留期
  #- selector: '{level="error"}'
  #  priority: 1
  #  period: 720h
chunk_store_config:
  max_look_back_period: 0s #最大日志可见时间,0表示一直可见。or  24h等等
table_manager:
  retention_deletes_enabled: false
  retention_period: 0s
compactor: 
  working_directory: /data/loki/compactor #compactor运行状态保存目录
  shared_store: filesystem
  retention_enabled: true #启动日志删除
  compaction_interval:  10m #compactor每隔10分钟运行一次
  retention_delete_delay: 2h  #在compactor运行2小时后删除
  retention_delete_worker_count: 150 #用150个worker删除chunks
analytics:
  reporting_enabled: false #关闭向loki团队发送此配置文件
EOF

配置文件说明:

 ingestion_rate_mb: 32  #采集速率,如果日志量比较大的话,需要调整的
 ingestion_burst_size_mb: 64 #单次采集大小,如果日志量比较大的话,需要调整的
 max_entries_limit_per_query: 0  #查询返回的条目的最大行数,默认是5000,0表示无限制

这三个是比较重要的,其它的其实是可以默认的,就性能比较好

在Loki中,对于客户端push到distributor中产生的每条日志流是可以对其做条目的大小限制的,这个在配置里面默认是不限制,也就是说每行的日志大小可以是无限?,当然大部分情况下我们都不会去限制这个,如果有的同学环境特殊,可以考虑开启对每行日志的大小限制。

limits_config:
# 日志条目的大小限制,默认不限制
  max_line_size:  | default = none

除此之外,对于单次查询的限制还有的chunk、stream和series的,不过大部分场景我们不会去对此做调整

limits_config:
  # 单个查询最多匹配的chunk个数
  max_chunks_per_query: | default = 2000000
  # 限制查询是匹配到的chunk大小,默认0为不限制
  max_query_length:  | default = 0
  # 单词查询最多匹配到的日志流个数
  max_streams_matchers_per_query: | default = 1000
  # 限制查询时最大的日志度量个数
  max_query_series: | default = 500
  # 查询的并发数
  max_query_parallelism  | default = 14
  # 允许租户缓存结果的有效时间
  max_cache_freshness_per_query   |default = 1m.

启动脚本:

/var/log/loki/ 目录需要提前建立,/opt/loki/loki-linux-amd64 是loki的执行程序,/opt/loki/loki-cfg.yaml是loki的配置文件绝对路径

cat >/etc/systemd/system/loki.service <<EOF
[Unit]
Description=loki
After=network.target
[Service]
ExecStart=/opt/loki/loki-linux-amd64 -config.file=/opt/loki/loki-cfg.yaml &>> /var/log/loki/loki.log
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF

启停和自动启动:

systemctl enable loki && systemctl start loki && systemctl status loki

六,

promtail的部署

promtail的配置文件:

这个是一个非常简单的静态读取/var/log/目录下的log后缀文件信息,并上传到loki

cat promtail_config.yaml 
server:
  http_listen_port: 9080
  grpc_listen_port: 0
# 记录读取日志的位置信息文件,Promtail重新启动时需要它
positions:
  filename: /tmp/positions.ymal
# Loki的api服务的地址
clients:
  - url: http://192.168.123.11:13100/loki/api/v1/push
scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*log

promtail的启动脚本:

cat >/etc/systemd/system/promtail.service <<EOF
[Unit]
Description=promtail
After=network.target
[Service]
ExecStart=/opt/loki/promtail-linux-amd64 -config.file=/opt/loki/promtail_config.yaml &>> /var/log/promtail/promtail.log
ExecReload=/bin/kill -s HUP 
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF

七,

grafana部署安装

这个没什么好说的,rpm安装启动服务就可以了

添加数据源

直接explore就可以看到如下了:

点击label browser 可以看到:

多说一句,内存和CPU最好还是给的高一点,一开始我只给的4G loki服务经常卡掉,很难受,给到8G后就流畅很多了。

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
11天前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
25天前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
26天前
|
敏捷开发 Kubernetes Cloud Native
阿里云云原生技术为企业提供了一套高效、灵活的解决方案,支持跨云部署与管理
在多云环境中,阿里云云原生技术为企业提供了一套高效、灵活的解决方案,支持跨云部署与管理。通过容器化、服务网格等技术,实现了应用的一致性与可移植性,简化了多云环境下的资源管理和服务治理,帮助企业应对复杂的云环境挑战,加速数字化转型。
40 5
|
26天前
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
34 3
|
1月前
|
监控 Cloud Native 持续交付
云原生技术深度解析:重塑现代应用开发与部署范式####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在现代软件开发中的重要性。通过剖析容器化、微服务架构、持续集成/持续部署(CI/CD)等关键技术,本文旨在揭示云原生技术如何促进应用的敏捷性、可扩展性和高可用性,进而推动企业数字化转型进程。不同于传统摘要仅概述内容要点,本部分将融入具体案例分析,直观展示云原生技术在实际应用中的显著成效与挑战应对策略,为读者提供更加丰富、立体的理解视角。 ####
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####
|
2月前
|
Cloud Native 持续交付 云计算
云端新纪元:探索云原生技术的奥秘在当今数字化时代,云计算已成为推动企业创新和增长的关键动力。随着云平台的不断成熟,云原生技术应运而生,以其独特的优势引领着一场新的技术革命。本文将深入探讨云原生的核心概念、主要特点以及它如何改变现代软件开发和部署的方式,为您揭开云原生这一神秘面纱。
云原生是一种构建和运行应用程序的方法,充分利用了云平台的弹性、分布式本质以及声明式基础设施。本文将解析云原生的十二要素,微服务架构的优势,以及容器化、持续集成与持续部署(CI/CD)等核心技术的实践应用。通过深入浅出的方式,让读者理解云原生不仅是一种技术,更是一种文化和方法论,它正在重塑软件开发流程,提高资源利用率和应用系统的可扩展性与容错性。
|
1月前
|
监控 Cloud Native 微服务
云端漫步:探索云原生应用的构建与部署
【10月更文挑战第32天】在数字时代的浪潮中,云原生技术如同一艘航船,承载着企业的梦想驶向未知的海洋。本文将带你领略云原生应用的魅力,从基础概念到实战操作,我们将一步步揭开云原生的神秘面纱,体验它如何简化开发、加速部署,并提升系统的可扩展性与可靠性。让我们一起启航,探索云原生的世界!
|
18天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
16天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
下一篇
DataWorks