Grafna +Loki +Promtail GLP日志可视化企业级实战( 二 )


读取就非常简单了,由负责给定一个时间范围和标签选择器,查看索引以确定哪些块匹配,并通过greps将结果显示出来 。它还从获取尚未刷新的最新数据 。
对于每个查询,一个查询器将为您显示所有相关日志 。实现了查询并行化,提供分布式grep,使即使是大型查询也是足够的 。
可以参考官方文档 Loki’s进一步深入了解 。最后,一句话形容下Loki就是like , but for logs 。
检查loki配置文件
loki -verify-config -config.file /etc/loki.ymllevel=error ts=2022-11-15T09:12:09.045289153Z caller=main.go:52 msg="validating config" err="invalid queryrange config: the yaml flag `split_queries_by_interval` must now be set in the `limits_config` section instead of the `query_range` config section"
修改loki 的数据默认路径
生产中的log比较多,粗略估计日均50GB的日志. 需要将loki的数据目录更换至大的存储.
使用安装loki只需要修改.yml 中的统一配置即可.
#-----------------------------------------------------------------# LOKI 2022年11月15日17:21:59 #-----------------------------------------------------------------loki_enabled: true# enable loki? only works on meta nodesloki_clean: false# whether remove existing loki dataloki_endpoint: http://10.10.10.10:3100/loki/api/v1/push # where to push dataloki_options: '-config.file=/etc/loki.yml -config.expand-env=true'loki_data_dir: /data/loki# default loki data dirloki_retention: 15d# log retention period
如果是自定义安装要修改loki的默认默认路径,需要搞清楚loki存储分两部分,日志原始文件和日志索引文件
按照Loki数据的设计思路,日志原始文件可以存放在任何文件系统中,可以是,对象存储等 。而日志的索引则专门存储到索引服务当中,这里面包含Loki内置的当中 。其数据存储主要的思想也是让用对象存储负责廉价地存储压缩日志,而索引则负责以快速,有效的查询方式存储这些标签 。
当前Loki1.6版本支持的数据存储如下:
Index 日志索引
将loki.yml 中的配置路径修改为新的位置后,重启loki即可 。
可以看到注意是chunk比较大 。
storage_config:boltdb_shipper:active_index_directory: /nfs/data/prometheus/lokidata/data/loki/data/boltdb-shipper-activecache_location: /nfs/data/prometheus/lokidata/data/loki/data/boltdb-shipper-cachecache_ttl: 336h# Can be increased for faster performance over longer query periods, uses more disk spaceshared_store: filesystemfilesystem: # 修改chunks存储的位置的位置,这里使用nfs 存储.directory: /nfs/data/prometheus/lokidata/data/loki/chunks
loki 生产配置
经过调优版本的loki配置(2022年11月16日09:06:38)
cat /etc/loki.yml#==============================================================## File:loki.yml# Ctime:2021-04-03# Mtime:2022-11-11# Desc:Loki configuration file# Path:/etc/loki.yml#==============================================================#auth_enabled: falseserver:http_listen_port: 3100grpc_listen_port: 9096grpc_server_max_recv_msg_size: 1079741824 # 远程调用最大接受的大小grpc_server_max_send_msg_size: 1079741824 # 远程调用最大发送的大小ingester:wal:enabled: truedir: /nfs/data/prometheus/lokidata/data/lokilifecycler:address: 127.0.0.1ring:kvstore:store: inmemoryreplication_factor: 1final_sleep: 0schunk_idle_period: 1h# Any chunk not receiving new logs in this time will be flushedmax_chunk_age: 1h# All chunks will be flushed when they hit this age, default is 1hchunk_target_size: 1048576# Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached firstchunk_retain_period: 30s# Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)max_transfer_retries: 0# Chunk transfers disabledschema_config: # 这里面主要定义的是Loki数据存储的策略 。从默认的配置里面可以得到的信息是Loki里面保存的是2022年2月22日之后的数据,同时原始文件存在filesystem中,index存在boltdb当中且保存的周期是168小时configs:- from: 2022-02-22store: boltdb-shipperobject_store: filesystemschema: v11index:prefix: index_period: 168hstorage_config: # Loki的存储引擎配置,这个区块里面,主要定义的是各类存储的一些基本信息 。只要你愿意,甚至可以把Loki支持的数据存储都加上?,拿filesystem做原始日志存储,boltdb做index存储boltdb_shipper:active_index_directory: /nfs/data/prometheus/lokidata/data/loki/data/boltdb-shipper-activecache_location: /nfs/data/prometheus/lokidata/data/loki/data/boltdb-shipper-cachecache_ttl: 336h# Can be increased for faster performance over longer query periods, uses more disk spaceshared_store: filesystemfilesystem:directory: /nfs/data/prometheus/lokidata/data/loki/chunkscompactor:working_directory: /nfs/data/prometheus/lokidata/data/loki/tmp/boltdb-shipper-compactorshared_store: filesystemlimits_config:enforce_metric_name: falsereject_old_samples: truereject_old_samples_max_age: 72hper_stream_rate_limit: 1GB # 设置太小会报错: error sending batch, will retry" status=429 error="server returned HTTP status 429 Too Many Requests (429): Ingestion rate limit exceeded for user fake per_stream_rate_limit_burst: 3GB #ingestion_rate_mb: 10ingestion_burst_size_mb: 15split_queries_by_interval: 15mchunk_store_config:max_look_back_period: 0stable_manager: # Table Manager是Loki的一个组件,主要负责在其时间段开始之前创建周期表,并在其数据时间范围超出保留期限时将其删除 。index_tables_provisioning:enable_ondemand_throughput_mode: trueenable_inactive_throughput_on_demand_mode: truechunk_tables_provisioning:enable_ondemand_throughput_mode: trueenable_inactive_throughput_on_demand_mode: trueretention_deletes_enabled: trueretention_period: 15d # 注意按照官方说法table_manager和storage_config中的数据周期时间必须为24h的倍数才能获得正确的生效frontend:max_outstanding_per_tenant: 2048query_range:align_queries_with_step: trueparallelise_shardable_queries: falsemax_retries: 5cache_results: trueresults_cache:cache:enable_fifocache: truefifocache:max_size_items: 1024validity: 24hruler:storage:type: locallocal:directory: /nfs/data/prometheus/lokidata/data/loki/data/rulesrule_path: /nfs/data/prometheus/lokidata/data/loki/data/rules-temp# alertmanager_url: http://127.0.0.1:9093ring:kvstore:store: inmemoryenable_api: true