一、简 介

Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展,高度可用的多租户日志聚合系统。 开发语言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。系统架构十分简单,由以下3个部分组成 :

  • Loki 是主服务器,负责存储日志和处理查询 。
  • promtail 是代理,负责收集日志并将其发送给 loki 。
  • Grafana 用于 UI 展示。

只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Loki为数据源进行日志查询(如果Loki服务器性能不够,可以部署多个Loki进行存储及查询)。作为一个日志系统不关只有查询分析日志的能力,还能对日志进行监控和报警

二、系 统 架 构

  1. promtail收集并将日志发送给loki的 Distributor 组件

  2. Distributor会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到Ingester

  3. Ingester 接受日志流并构建数据块,压缩后存放到所连接的存储后端

  4. Querier 收到HTTP查询请求,并将请求发送至Ingester 用以获取内存数据 ,Ingester 收到请求后返回符合条件的数据 ;

    如果 Ingester 没有返回数据,Querier 会从后端存储加载数据并遍历去重执行查询 ,通过HTTP返回查询结果

三、与 ELK 比 较

  • ELK虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,有点杀鸡用牛刀的感觉。
  • 不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。
  • 通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。
  • 安装部署简单快速,且受 Grafana 原生支持。

四、安 装 示 例

1)下载安装包以及获取默认配置文件

loki、promtail、grafana官网、loki-local-config.yaml、promtail-local-config.yaml

curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/loki-linux-amd64.zip"
curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/promtail-linux-amd64.zip"
wget https://dl.grafana.com/oss/release/grafana-7.1.1.linux-amd64.tar.gz
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/promtail/promtail-local-config.yaml

注:配置文件也可自行创建编写

2)解压安装包至指定目录(/data/software/loki/)
unzip -q loki-linux-amd64.zip -d /data/software/loki/
unzip -q promtail-linux-amd64.zip -d /data/software/loki/
3)将配置文件放置在指定目录(/data/software/loki/etc/)
mv loki-local-config.yaml /data/software/loki/etc/
mv promtail-local-config.yaml /data/software/loki/etc/
4)修改配置文件
vim loki-local-config.yaml
auth_enabled: falseserver:http_listen_port: 3100     #监听的端口ingester:lifecycler:address: 127.0.0.1ring:kvstore:store: inmemoryreplication_factor: 1final_sleep: 0schunk_idle_period: 5mchunk_retain_period: 30smax_transfer_retries: 0schema_config:configs:- from: 2020-07-29store: boltdbobject_store: filesystemschema: v11index:prefix: index_period: 168hstorage_config:boltdb:directory: /data/loki/index   #自定义boltdb目录filesystem:directory: /data/loki/chunks #自定义filesystem目录limits_config:enforce_metric_name: falsereject_old_samples: truereject_old_samples_max_age: 168hchunk_store_config:max_look_back_period: 0stable_manager:retention_deletes_enabled: falseretention_period: 0s
vim promtail-local-config.yaml
# Promtail服务配置
server:http_listen_port: 9080grpc_listen_port: 0# 记录读取日志的位置信息文件,Promtail重新启动时需要它
positions:filename: /tmp/positions.ymal# Loki的api服务的地址
clients:- url: http://192.168.8.110:3100/loki/api/v1/pushscrape_configs:
# ngxin日志收集并打标签- job_name: nginx     # 服务名称static_configs:- targets:- localhost   # 目标服务器名称labels:job: nginx-error  # 作业名称host: localhost   # 服务器地址__path__: /var/log/*log     #服务器日志路径
docker-composer.yml

vim docker-compose-monitor.yml (promtail采集程序不建议采用docker安装)

[root@localhost config]# mkdir -p /opt/loki/index
[root@localhost config]# mkdir -p /opt/loki/chunks
docker-compose -f docker-compose-loki.yml up -d     #启动
docker-compose -f docker-compose-loki.yml down      #关闭
docker restart lokidocker logs prometheus
docker logs node-exporter
docker logs cadvisor
docker logs grafana
docker logs alertmanager
docker logs loki
docker logs promtail
#检查端口是否开启
ss -ntlp | grep -E '9090|9100|8080|3000|9093|3100'
version: '3.1'
networks:monitor:driver: bridge
services:prometheus:image: prom/prometheuscontainer_name: prometheushostname: prometheusrestart: alwaysenvironment:- TZ=Asia/Shanghai- LANG=zh_CN.UTF-8volumes:- /opt/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml- /opt/prometheus/config/node_down.yml:/etc/prometheus/node_down.ymlports:- "9090:9090"networks:- monitoralertmanager:image: prom/alertmanagercontainer_name: alertmanagerhostname: alertmanagerrestart: alwaysenvironment:- TZ=Asia/Shanghai- LANG=zh_CN.UTF-8volumes:- /opt/prometheus/config/alertmanager.yml:/etc/alertmanager/alertmanager.ymlports:- "9093:9093"networks:- monitorgrafana:image: grafana/grafanacontainer_name: grafanahostname: grafanarestart: alwaysenvironment:- TZ=Asia/Shanghai- LANG=zh_CN.UTF-8ports:- "3000:3000"networks:- monitornode-exporter:image: quay.io/prometheus/node-exportercontainer_name: node-exporterhostname: node-exporterrestart: alwaysenvironment:- TZ=Asia/Shanghai- LANG=zh_CN.UTF-8ports:- "9100:9100"networks:- monitorcadvisor:image: google/cadvisor:latestcontainer_name: cadvisorprivileged: truehostname: cadvisorrestart: alwaysenvironment:- TZ=Asia/Shanghai- LANG=zh_CN.UTF-8volumes:- /:/rootfs:ro- /var/run:/var/run:ro- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:ro- /dev/disk/:/dev/disk:ro ports:- "8080:8080"networks:- monitorloki:image: grafana/loki:latestcontainer_name: lokihostname: lokirestart: alwaysenvironment:- TZ=Asia/Shanghai- LANG=zh_CN.UTF-8volumes:- /opt/loki/config/loki-local-config.yaml:/etc/loki/loki-local-config.yaml- /opt/loki/index :/data/loki/index- /opt/loki/chunks:/data/loki/chunksports:- "3100:3100"command: -config.file=/etc/loki/loki-local-config.yamlnetworks:- monitorpromtail:image: grafana/promtailcontainer_name: promtailhostname: promtailrestart: alwaysenvironment:- TZ=Asia/Shanghai- LANG=zh_CN.UTF-8volumes:- /opt/prometheus/config/promtail-local-config.yaml:/etc/promtail/promtail-local-config.yamlcommand: -config.file=/etc/promtail/promtail-local-config.yamlnetworks:- monitor
5)Grafana安装:
tar -xf grafana-7.1.1.linux-amd64.tar.gz -C /data/software/
6)启动服务(先启loki):
nohup /data/software/loki/loki-linux-amd64 -config.file=/data/software/loki/etc/loki-local-config.yaml &nohup /data/software/loki/promtail-linux-amd64 -config.file=/data/software/loki/etc/promtail-local-config.yaml &nohup /data/software/grafana-7.1.1/bin/grafana-server web &

注:每次启动完可以查看所在目录的nohup.out,查看启动情况

五、使 用 示 例

1)浏览器登陆地址:http://127.0.0.1:3000 访问Grafana,首次登陆默认用户名和密码都是 admin,登录后会提示修改密码。http://192.168.8.110:3100

2)进入Data Sources添加数据源,选择Loki,URL为loki的地址: http://127.0.0.1:3100 ,Name自己定义

3)然后进入Explore就可以搜索查询日志了,日志查询由两部分组成:日志流选择器搜索表达式。出于性能原因,需要先通过选择日志标签来选择日志流。查询字段Log labels旁边的按钮显示了可用日志流的标签列表

标签匹配符:

  • = 完全相等。

  • != 不相等。

  • =~ 正则表达式匹配。

  • !~ 不进行正则表达式匹配。

    例:{job=“UMG-log”,filename=“/home/zoehuawang/loki/UMG.07.18.15-40-07.log”}

搜索表达式:

  • |= 行包含字符串。

  • != 行不包含字符串。

  • |~ 行匹配正则表达式。

  • !~ 行与正则表达式不匹配。

    例:{job=“UMG-log”} |= “07.18” |= “[-973]” != “0xffffffff”

点击了解适用于Loki的logstash插件使用方法

日志系统Loki安装部署相关推荐

  1. 轻量级日志分析PLG平台Loki安装部署及使用(promtail+loki+Grafana)

    轻量级日志分析PLG平台Loki安装部署及使用(promtail+loki+Grafana) Loki简介 简介 ​ Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用 ...

  2. RHEL6 最小化系统 编译安装部署zabbix (mysql)

    RHEL6 最小化系统 编译安装部署zabbix (mysql) 官方说明详细见:https://www.zabbix.com/documentation/4.0/manual/installatio ...

  3. 交通数据分析系统:安装部署

    文章目录 交通数据分析系统:安装部署 1.实验描述 2.实验环境 3.相关技能 4.知识点 5.效果图 6.实验步骤 7.总结 交通数据分析系统:安装部署 1.实验描述 出租车数据分析实验环境安装部署 ...

  4. loki 日志管理的安装部署使用

    loki介绍 Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统.它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流 ...

  5. 轻量级日志系统Loki原理简介和使用

    前言 这篇文章应朋友的要求,让写一篇loki日志系统,咱定义不容辞 一定要好好写 开干! 现实中的需求 公司的容器云运行的应用或某一个节点出现了问题,解决的思路 问题首先被prometheus监控 1 ...

  6. 日志系统----Loki日志新贵

    Loki 一.Loki简介(译) 二.helm部署Loki 1.环境准备 2.helm部署Loki 三.grafana使用简单说明 一.Loki简介(译) Like Prometheus, but f ...

  7. [运维] 在CentOS7系统上安装部署wok

    系统环境说明 系统:CentOS-7-x86_64-2009 平台:x86-64 使用到的工具安装 git安装 yum install git 软件下载 采用编译安装,源代码获取 git clone ...

  8. 创业公司 互联网架构方案 整体技术栈 基础设施 数据库 服务治理 消息中间件 日志系统 ELK 自动化部署

    欢迎关注博主公众号:[矿洞程序员]文章由陈晓阳原创. 本人微信:chenxiaoyangzxy. 免费提供本人大量学习资料. 从零开始搭建创业公司后台技术栈 原创: 潘锦 说到后台技术栈,脑海中是不是 ...

  9. weblogic12 linux部署,linux系统中安装部署weblogic12.1.3

    问题: 此 Oracle 软件未经当前操作系统认证. 建议案: 确保在正确的平台上安装软件. 警告: 检查:CertifiedVersions 失败. 开始检查: CheckJDKVersion 预期 ...

最新文章

  1. 【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十
  2. java之七 高级类设计
  3. java将数组中的数据修改,深度集成!
  4. (42)css特异性
  5. 用PHP制作饼图调查表
  6. 上海计算机一级填空题,上海市计算机一级考试填空题.doc
  7. 实现一个左滑删除功能
  8. Gradle里配置jetty实现静态资源的热部署
  9. GUI实现学生点名系统
  10. 记某众测存储型xss漏洞小tips
  11. 知道一个公司的网站地址,怎么快速获取邮箱。
  12. python图片水印
  13. AutoCAD参照编辑期间不允许使用 SAVE 命令怎么办
  14. 【RMQ】POJ 3264 Balanced Lineup
  15. 不同网段间访问共享文件
  16. Telephony--彩信问题分析方法
  17. 盛世乐居任命首席执行官及首席财务官
  18. matlab中的mkdir函数_matlab所有函数集合
  19. 条码 vs RFID: 条码应用的优势
  20. 如何获取iOS 设备的 UDID

热门文章

  1. JAVA中parameterized,Java编程中Parameterized Test-Junit
  2. 华为OSPF配置练习
  3. 什么是匿名内部类,如何使用匿名内部类
  4. echarts 地图geo、geo3D 下穿
  5. 安徽省2018工程计价电子版_安徽省住房城乡建设厅发布2018版安徽省建设工程计价依据的通知...
  6. 五、ADC如何使用DMA采集数据
  7. java shutdowninput_socket的shutdownInput和shutdownOutput是干嘛用的
  8. “大连天健网”“中国石油大学”等网站被挂马
  9. 打破区块链不可能三角!2 华人专家论文将登 NSDI 2019 计算机顶会
  10. local-path-provisioner 源码解析