promtail 配置详解_基于loki+promtail+grafana技术的日志集合
一、背景和动机
近期运维工作中,随着项目的不停优化以及上线。在与后端、测试协同工作的交流中发现,为了测试以及解决项目在上线过程中或者试运行中出现的bug报错问题,开发同事对于日志的分析有着很大的需求。但是现在公司的日志查看主要是给予极少数的人员较大的权限,以及大量的需要运维人员帮忙登陆服务器查看服务日志进行下拉,复制黏贴给开发同事进行自主排错。
所以为了提高工作效率,同时也减轻运维同事的工作压力。需要引入日志系统,统一收集日志,又同时可以在页面中使得开发进行查看,极大的提高排错效率。
二、技术对比
这里主要对比两项技术ELK与loki
2.1:技术特点
ELK:
优点:
1、功能丰富,允许复杂的操作
2、对数据的处理,清洗有着巨大的优势,同时技术框架应用成熟,论坛等技术交流方法成熟。
劣势:
1、方案往往规模复杂,资源占用高,操作难。很多功能往往用不上,大多数查询只关注一定时间范围和一些简单的参数(如host、service等),使用这些解决方案有点大材小用。
2、主流的ELK(全文检索)或者EFK比较重
3、Kibana和Grafana之间切换,影响用户体验
4、倒排索引的切分和共享的成本较高
Loki:
优点:
1、Loki的架构非常简单,使用了和prometheus一样的标签来作为索引,通过这些标签既可以查询日志的内容也可以查询到监控的数据,不但减少了两种查询之间的切换成本,也极大地降低了日志索引的存储。
2、与ELK相比,消耗的成本更低,具有成本效益。
3、在日志的收集以及可视化上可以连用grafana,实现在日志上的筛选以及查看上下行的功能。
缺点:
1、技术比较新颖,相对应的论坛不是非常活跃。
2、功能单一,只针对日志的查看,筛选有好的表现,对于数据的处理以及清洗没有ELK强大,同时与ELK相比,对于后期,ELK可以连用各种技术进行日志的大数据处理,但是loki不行。
三、框架说明
Loki架构:
Loki使用了和prometheus一样的标签来作为索引,通过标签既可以查询日志的内容也可以查询到监控的数据。Loki将使用与prometheus相同的服务发现和标签重新标记库编写了的pormtail,在节点中promtail以daemonset方式运行在每个节点中通过api等,将它们发送到Loki,然loki与grafana连用,实现日志的可视化显示。
日志的存储框架:
1、Distributor:第一个接收日志的组件,Loki通过构建压缩数据块来实现批处理和压缩数据
2、Ingester:组件ingester是一个有状态的组件,负责构建和刷新chunck,当chunk达到一定的数量或者时间后,刷新到存储中去。
3、Querier:由Querier负责给定一个时间范围和标签选择器,Querier查看索引以确定哪些块匹配,并通过greps将结果显示出来。
四、部署
下载docker镜像
Docker pull grafana/loki:1.5.0
Docker pull grafana/promtail:latest
Docker pull grafana/grafana:latest
编写docker-compose文件
grafana:
image: grafana/grafana:latest //指定启动镜像
user: root
volumes:- ./grafana/provisioning/:/etc/grafana/provisioning/ //文件映射以及文件夹映射
- ./grafana/grafana.ini:/etc/grafana/grafana.ini- /data/grafana:/var/lib/grafana
ports:- 3000:3000 //端口映射
network_mode: 'host' //所属网络
loki:
image: grafana/loki:1.5.0 //启动镜像定义
container_name: loki
restart: always
ports:- "3100:3100"volumes:- /root/elk/loki-local-config.yaml:/etc/loki/loki-local-config.yaml
network_mode:'host'promtail:
image: grafana/promtail:latest
container_name: promtail
restart: always
volumes:- /root/elk/promtail-docker-config.yaml:/etc/promtail/config.yml- /opt:/opt //该映射地址可以我定义为日志存放地址1
- /var/log:/var/log //该映射地址可以我定义为日志存放地址2
network_mode: 'host'
编写promtail与loki的启动配置文件
Promtail的配置文件 vim /root/elk/promtail-docker-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml # 游标记录上一次同步位置
sync_period: 5s #10秒钟同步一次
clients:
- url: http://192.168.18.21:3100/loki/api/v1/push
scrape_configs:
- job_name: php-log
static_configs:
- targets:
- localhost
labels:
job: php_logs
__path__: /opt/loki/php/*log # docker运行时已经把宿主机的目录 /opt/
映射给了promtail 容器的/opt/,所以这个地方可以直接访问log文件
- job_name: tomcat-log
static_configs:-targets:-localhost
labels:
job: tomcat_logs
__path__:/opt/loki/tomcat/*log # docker运行时已经把宿主机的目录 /opt/ 映射给了promtail 容器的 /opt/,所以这个地方可以直接访问log文件
Loki配置文件 vim /root/elk/loki-local-config.yaml
参考官方
具体实例如下:
auth_enabled: falseserver:
http_listen_port:3100ingester:
lifecycler:
address:192.168.18.21ring:
kvstore:
store: inmemory
replication_factor:1final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
schema_config:
configs:- from: 2020-09-02store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory:/tmp/loki/index
filesystem:
directory:/tmp/loki/chunks
limits_config:
enforce_metric_name:falsereject_old_samples:truereject_old_samples_max_age: 168h
chunk_store_config:
max_look_back_period:0table_manager:
chunk_tables_provisioning:
inactive_read_throughput:0inactive_write_throughput:0provisioned_read_throughput:0provisioned_write_throughput:0index_tables_provisioning:
inactive_read_throughput:0inactive_write_throughput:0provisioned_read_throughput:0provisioned_write_throughput:0retention_deletes_enabled:falseretention_period:0
启动容器
Docker-compose up -d
promtail 配置详解_基于loki+promtail+grafana技术的日志集合相关推荐
- mysql 5.5.35 单机多实例配置详解_基于mysql-5.5.32的单机多实例多配置文件的
1.安装环境: [root@localhost ~]# [root@localhost ~]# uname -a Linux localhost.localdomain 2.6.32-504.16.2 ...
- SpringAOP描述及实现_AspectJ详解_基于注解的AOP实现_SpringJdbcTemplate详解
AOP AOP特点: 面向切面编程, 利用AOP对业务逻辑的各个部分进行抽取公共代码, 降低耦合度, 提高代码重用性, 同时提高开发效率. 采取横向抽取, 取代传统纵向继承体系重复性代码 解决事务管理 ...
- mysql查询语句详解_基于mysql查询语句的使用详解
1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ...
- python ssl模块用法详解_一看就懂,Python 日志模块详解及应用!
日志概述 百度百科的日志概述: Windows网络操作系统都设计有各种各样的日志文件,如应用程序日志,安全日志.系统日志.Scheduler服务日志.FTP日志.WWW日志.DNS服务器日志等等,这些 ...
- STM8L101系列单片机串口配置详解(基于IAR自带库)
STM8L101f3p6 有一个串口如图 本历程基于库操作 不讨论具体寄存器操作 有兴趣的同学可以自行参考编程手册 下面看一下手册的了解一下特点 本人英语是个小白只可意会不可言传了 内部结构了由于是 ...
- python3类的继承详解_基于python3 类的属性、方法、封装、继承详解
下面小编就为大家带来一篇基于python3 类的属性.方法.封装.继承实例讲解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Python 类 Python中的类提供了 ...
- mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍
为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. ...
- dbcp连接池配置详解_重学MySQL:事务与连接池,一文详解带你搞懂
拼多多三面惨败,java中间件.数据库与spring框架,答不上... 吊打MySQL:21性能优化实践+学习导图+55面试+笔记+20高频知识点 Mysql事务 事务: 事务指逻辑上的一组操作,组成 ...
- mysql自然连接的例题详解_基于 MySQL 的数据库实践(自然连接)
在基本查询一节的示例中,我们有从 instructor 和 teaches 表组合信息,匹配条件是 instructor.ID 等于 teaches.ID 的查询,ID 属性是两个表中具有相同名称的所 ...
最新文章
- python知道答案_Python程序设计基础知道章节测试答案
- ffmpeg 播放器原理
- opengl加载显示3D模型obj类型文件
- c# 跨线程访问窗体UI
- arcgis风向_[ArcGIS] 空间分析(六) 追踪分析(台风路径)
- gtest 学习之五 测试用例中定义类
- Android 中的冷启动和热启动
- 秩和比综合评价法(RSR)详解及Python实现和应用
- DXGI高帧率屏幕录像软件源码解析(声音捕获,抓屏,ffmpeg录像,MP4录像,flv录像,麦克风采集)(第1篇API展示及使用部分)
- 人工智能学习资源汇总
- 校友会2020计算机专业排名,校友会2020中国一流专业排名1200强公布,北大位列第一...
- 计算机专业兴趣小组 名字,最有创意的小组名字及口号(精选70个)
- 【视频制作表情包】能直接添加文字的表情包制作工具
- NFT艺术品交易平台
- 十大不良习惯损害大脑
- esp8266,esp32中的SPI FLASH 访问模式(QIO QOUT DIO DOUT)
- shell一键自动化批量安装服务
- codeforce A. Bank Robbery
- tp接入富友H5支付
- VLC打不开视频文件调试技巧
热门文章
- 10月数据库排行:Microsoft SQL Server分数增加最多
- .NET 云原生技术使用调查
- Kubernetes架构为什么是这样的?
- .NET Core Community 第三个千星项目诞生:爬虫 DotnetSpider
- 使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器
- 全球首发免费的MySql for Entity Framework Core
- 玩玩Xamarin Evolve 2016带来的新特性(一)-iOS Simulator(for Windows)
- Navicat Premium 64 bit 12.1.25
- C#数组原来这么简单,你学废了吗?
- ArcGIS中数据存放相对路径和绝对路径的区别