一、背景和动机

近期运维工作中,随着项目的不停优化以及上线。在与后端、测试协同工作的交流中发现,为了测试以及解决项目在上线过程中或者试运行中出现的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技术的日志集合相关推荐

  1. mysql 5.5.35 单机多实例配置详解_基于mysql-5.5.32的单机多实例多配置文件的

    1.安装环境: [root@localhost ~]# [root@localhost ~]# uname -a Linux localhost.localdomain 2.6.32-504.16.2 ...

  2. SpringAOP描述及实现_AspectJ详解_基于注解的AOP实现_SpringJdbcTemplate详解

    AOP AOP特点: 面向切面编程, 利用AOP对业务逻辑的各个部分进行抽取公共代码, 降低耦合度, 提高代码重用性, 同时提高开发效率. 采取横向抽取, 取代传统纵向继承体系重复性代码 解决事务管理 ...

  3. mysql查询语句详解_基于mysql查询语句的使用详解

    1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ...

  4. python ssl模块用法详解_一看就懂,Python 日志模块详解及应用!

    日志概述 百度百科的日志概述: Windows网络操作系统都设计有各种各样的日志文件,如应用程序日志,安全日志.系统日志.Scheduler服务日志.FTP日志.WWW日志.DNS服务器日志等等,这些 ...

  5. STM8L101系列单片机串口配置详解(基于IAR自带库)

    STM8L101f3p6  有一个串口如图 本历程基于库操作 不讨论具体寄存器操作 有兴趣的同学可以自行参考编程手册 下面看一下手册的了解一下特点 本人英语是个小白只可意会不可言传了 内部结构了由于是 ...

  6. python3类的继承详解_基于python3 类的属性、方法、封装、继承详解

    下面小编就为大家带来一篇基于python3 类的属性.方法.封装.继承实例讲解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Python 类 Python中的类提供了 ...

  7. mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. ...

  8. dbcp连接池配置详解_重学MySQL:事务与连接池,一文详解带你搞懂

    拼多多三面惨败,java中间件.数据库与spring框架,答不上... 吊打MySQL:21性能优化实践+学习导图+55面试+笔记+20高频知识点 Mysql事务 事务: 事务指逻辑上的一组操作,组成 ...

  9. mysql自然连接的例题详解_基于 MySQL 的数据库实践(自然连接)

    在基本查询一节的示例中,我们有从 instructor 和 teaches 表组合信息,匹配条件是 instructor.ID 等于 teaches.ID 的查询,ID 属性是两个表中具有相同名称的所 ...

最新文章

  1. python知道答案_Python程序设计基础知道章节测试答案
  2. ffmpeg 播放器原理
  3. opengl加载显示3D模型obj类型文件
  4. c# 跨线程访问窗体UI
  5. arcgis风向_[ArcGIS] 空间分析(六) 追踪分析(台风路径)
  6. gtest 学习之五 测试用例中定义类
  7. Android 中的冷启动和热启动
  8. 秩和比综合评价法(RSR)详解及Python实现和应用
  9. DXGI高帧率屏幕录像软件源码解析(声音捕获,抓屏,ffmpeg录像,MP4录像,flv录像,麦克风采集)(第1篇API展示及使用部分)
  10. 人工智能学习资源汇总
  11. 校友会2020计算机专业排名,校友会2020中国一流专业排名1200强公布,北大位列第一...
  12. 计算机专业兴趣小组 名字,最有创意的小组名字及口号(精选70个)
  13. 【视频制作表情包】能直接添加文字的表情包制作工具
  14. NFT艺术品交易平台
  15. 十大不良习惯损害大脑
  16. esp8266,esp32中的SPI FLASH 访问模式(QIO QOUT DIO DOUT)
  17. shell一键自动化批量安装服务
  18. codeforce A. Bank Robbery
  19. tp接入富友H5支付
  20. VLC打不开视频文件调试技巧

热门文章

  1. 10月数据库排行:Microsoft SQL Server分数增加最多
  2. .NET 云原生技术使用调查
  3. Kubernetes架构为什么是这样的?
  4. .NET Core Community 第三个千星项目诞生:爬虫 DotnetSpider
  5. 使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器
  6. 全球首发免费的MySql for Entity Framework Core
  7. 玩玩Xamarin Evolve 2016带来的新特性(一)-iOS Simulator(for Windows)
  8. Navicat Premium 64 bit 12.1.25
  9. C#数组原来这么简单,你学废了吗?
  10. ArcGIS中数据存放相对路径和绝对路径的区别