封面图片来自于loki官网

1、loki是什么

Loki是一个水平可扩展,高可用性,多租户的日志聚合系统,受到Prometheus的启发。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。官方介绍说到:Like Prometheus, but for logs.

2、loki特点

与其他日志聚合系统相比,Loki

  • 不对日志进行全文索引。通过存储压缩的非结构化日志和仅索引元数据,Loki操作更简单,运行更便宜。
  • 索引和组使用与Prometheus已使用的相同标签记录流,使您可以使用与Prometheus已使用的相同标签在指标和日志之间无缝切换。
  • 特别适合存放Kubernetes Pod日志; 诸如Pod标签之类的元数据会被自动删除和编入索引。
  • Grafana有本机支持(已经包含在Grafana 6.0或更新版本中)。

3、loki组成

Loki由3个组成部分组成:

  • loki 是主服务器,负责存储日志和处理查询。
  • promtail 是代理,负责收集日志并将其发送给loki。
  • 用户界面的Grafana。

4、loki安装

loki的安装方式包含如下:使用官方的docker镜像单独运行、使用helm工具在kubernetes上安装、使用源码构建。

本文采用的方法是基于kubernetes环境使用helm安装。所以前提是需要有一个kubernetes环境并且安装好了helm

[root@k8s-qa-master-01 ~]# helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
[root@k8s-qa-master-01 ~]# helm repo list
NAME URL
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
local http://127.0.0.1:8879/charts

4.1、添加helm的chart库

[root@k8s-qa-master-01 ~]# helm repo add loki https://grafana.github.io/loki/charts
"loki" has been added to your repositories
[root@k8s-qa-master-01 ~]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "loki" chart repository
Update Complete.
[root@k8s-qa-master-01 ~]# helm repo list
NAME URL
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
local http://127.0.0.1:8879/charts
loki https://grafana.github.io/loki/charts

4.2、安装loki及promtail

分为以下多种安装方式:

  • 默认安装
helm upgrade --install loki loki/loki-stack
  • 自定义namespaces安装
helm upgrade --install loki --namespace=loki-stack loki/loki-stack
  • 选择安装,只安装loki或只安装promtail
helm upgrade --install loki loki/loki
helm upgrade --install promtail loki/promtail --set "loki.serviceName=loki"
  • 自定义配置安装

方法一:在helm命令中使用--set参数覆盖默认chart中的配置或者是chart中子chart的配置。

helm upgrade --install loki loki/loki-stack --set "key1=val1,key2=val2,..."

方法二:只下载相应的chart包,下载后修改默认配置再安装。默认下载的chart包在~/.helm/cache/archive目录下,例如修改默认promtail收集日志的目录

[root@k8s-qa-master-01 archive]# pwd
/root/.helm/cache/archive
[root@k8s-qa-master-01 archive]# ls
loki-stack-0.16.3.tgz
[root@k8s-qa-master-01 archive]# tar xf loki-stack-0.16.3.tgz
[root@k8s-qa-master-01 archive]# vim loki-stack/charts/promtail/values.yaml
···
# Extra volumes to scrape logs from
volumes:
- name: docker
hostPath:
path: /data/docker/containers
- name: pods
hostPath:
path: /var/log/pods volumeMounts:
- name: docker
mountPath: /data/docker/containers
readOnly: false
- name: pods
mountPath: /var/log/pods
readOnly: false
···

修改完配置后进行安装

[root@k8s-qa-master-01 archive]# helm install ./loki-stack --name=loki --namespace=kube-system
NAME: loki
LAST DEPLOYED: Wed Sep 25 14:29:07 2019
NAMESPACE: kube-system
STATUS: DEPLOYED RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 42s ==> v1/ClusterRoleBinding
NAME AGE
loki-promtail-clusterrolebinding 42s ==> v1/ConfigMap
NAME DATA AGE
loki-loki-stack-test 1 44s
loki-promtail 1 44s ==> v1/DaemonSet
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
loki-promtail 5 5 0 5 0 <none> 39s ==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
loki-0 0/1 Running 0 37s
loki-promtail-2lqzz 0/1 Running 0 36s
loki-promtail-8rpdj 0/1 ContainerCreating 0 37s
loki-promtail-h4lrm 0/1 Running 0 37s
loki-promtail-mbjws 0/1 Running 0 37s
loki-promtail-nj7k4 0/1 Running 0 36s ==> v1/Role
NAME AGE
loki 41s
loki-promtail 41s ==> v1/RoleBinding
NAME AGE
loki 40s
loki-promtail 40s ==> v1/Secret
NAME TYPE DATA AGE
loki Opaque 1 44s ==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
loki ClusterIP 10.68.3.79 <none> 3100/TCP 39s
loki-headless ClusterIP None <none> 3100/TCP 40s ==> v1/ServiceAccount
NAME SECRETS AGE
loki 1 43s
loki-promtail 1 42s ==> v1/StatefulSet
NAME READY AGE
loki 0/1 39s ==> v1beta1/PodSecurityPolicy
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES
loki false RunAsAny MustRunAsNonRoot MustRunAs MustRunAs true configMap,emptyDir,persistentVolumeClaim,secret
loki-promtail false RunAsAny RunAsAny RunAsAny RunAsAny true secret,configMap,hostPath NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana. See http://docs.grafana.org/features/datasources/loki/ for more detail.
[root@k8s-qa-master-01 archive]# kubectl get pods -n kube-system|grep loki
loki-0 1/1 Running 0 2m11s
loki-promtail-2lqzz 1/1 Running 0 2m10s
loki-promtail-8rpdj 1/1 Running 0 2m11s
loki-promtail-h4lrm 1/1 Running 0 2m11s
loki-promtail-mbjws 1/1 Running 0 2m11s
loki-promtail-nj7k4 1/1 Running 0 2m10s

4.3、安装grafana

本步骤的前提是还没有安装grafana,如果在安装loki前已经安装好,此步骤可忽略

安装

helm install stable/grafana -n loki-grafana

获取grafana密码

kubectl get secret --namespace <YOUR-NAMESPACE> loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

访问grafana,开启端口转发

kubectl port-forward --namespace <YOUR-NAMESPACE> service/loki-grafana 3000:80

如果将Loki和Promtail部署在不同的群集上,则可以在Loki前面添加一个Ingress。通过添加证书,您可以创建一个https端点。为了提高安全性,请在Ingress上启用基本身份验证,可参考地址

5、配置和使用

登录到gfafana,配置loki的数据源



切换到grafana左侧区域的Explore,即可进入到loki的页面



点击Log labels就可以把当前系统采集的日志标签给显示出来,可以根据这些标签进行日志的过滤查询,也可直接输入过滤表达式,如图所示,过滤出container名称为jenkins的日志

6、日志选择和过滤

6.1、日志选择器

对于查询表达式的标签部分,将其用大括号括起来{},然后使用键值语法选择标签。多个标签表达式用逗号分隔:

{app="mysql",name="mysql-backup"}

当前支持以下标签匹配运算符:

  • = 完全相等。
  • != 不相等。
  • =~ 正则表达式匹配。
  • !~ 不进行正则表达式匹配。

例子:

{name=~"mysql.+"}
{name!~"mysql.+"}

6.2、日志过滤器

编写日志流选择器后,您可以通过编写搜索表达式来进一步过滤结果。搜索表达式可以只是文本或正则表达式。

查询示例:

{job="mysql"} |= "error"
{name="kafka"} |~ "tsdb-ops.*io:2003"
{instance=~"kafka-[23]",name="kafka"} != kafka.server:type=ReplicaManager

过滤器运算符可以被链接,并将顺序过滤表达式-结果日志行将满足每个过滤器。例如:

{job="mysql"} |= "error" != "timeout"

已实现以下过滤器类型:

  • |= 行包含字符串。
  • != 行不包含字符串。
  • |~ 行匹配正则表达式。
  • !~ 行与正则表达式不匹配。

    regex表达式接受RE2语法。默认情况下,匹配项区分大小写,并且可以将regex切换为不区分大小写的前缀(?i)。

更多内容可参考官方说明

日志聚合工具loki的更多相关文章

  1. 日志聚合工具之 Loki

    本文使用的 Loki 和 Promtail 版本为 1.6.1,Grafana 版本为 7.2.0:部署在 Linux 服务器 Loki 负责日志的存储和查询:Promtail 负责日志的采集并推送给 ...

  2. .NET Core + K8S + Loki 玩转日志聚合

    1. Intro 最近在了解日志聚合系统,正好前几天看到一篇文章<用了日志系统新贵Loki,ELK突然不香了!>,所以就决定动手体验一下.本文就带大家快速了解下Loki,并简单介绍.NET ...

  3. 轻量级日志收集方案Loki

    先看看结果有多轻量吧 官方文档:https://grafana.com/docs/loki/latest/ 简介 Grafana Loki 是一个日志聚合工具,它是功能齐全的日志堆栈的核心. Loki ...

  4. .Net Core with 微服务 - Seq 日志聚合

    上一次我们介绍并演示了如果使用 Consul 做为我们微服务的注册中心,来实现服务的注册与发现.那么本次我们讲会演示如何做日志聚合.日志聚合比较常用的有 ELK 等,但是这次我想要介绍的是一款比较小众 ...

  5. Kubernetes-20:日志聚合分析系统—Loki的搭建与使用

    日志聚合分析系统--Loki 什么是Loki? Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统.它的设计非常经济高效且易于操作,因为它不会 ...

  6. Hadoop生态圈-flume日志收集工具完全分布式部署

    Hadoop生态圈-flume日志收集工具完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   目前为止,Hadoop的一个主流应用就是对于大规模web日志的分析和处理 ...

  7. 微服务架构 | 10.2 使用 Papertrail 实现日志聚合

    目录 前言 1. Papertrail 基础知识 1.1 Papertrail 特点 1.2 Papertrail 是什么 2. 使用 Papertrail 进行日志聚合的示例 2.1 创建 Pape ...

  8. 使用 EFKLK 搭建 Kubernetes 日志收集工具栈

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247491992&idx=1&sn=a770252759 ...

  9. 【转】gc日志分析工具

    性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析. Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc ...

随机推荐

  1. Flink Table Api & SQL 翻译目录

    Flink 官网 Table Api & SQL  相关文档的翻译终于完成,这里整理一个安装官网目录顺序一样的目录 [翻译]Flink Table Api & SQL —— Overv ...

  2. django orm 改动数据库中已存在的表(添加、删除、修改表字段)

    python3 manage.py makemigrations --empty api # 因为我的models.py文件并直接在项目根目录,而是根目录下的api目录中 python3 manage ...

  3. MacbookPro15 2019 闪屏雪花现象方案汇总

    1. 系统偏好设置,显示器,关闭 "自动调节亮度" "原彩显示",即取消勾选. 2. 系统偏好设置,节能,关闭 "自动切换图形卡模式",即取 ...

  4. [xsy3132]数表

    题意:一个$n\times m$的数表,数值$\in[0,4)$,你可以任意次选择一行或一列$+1,\text{mod }4$,要最小化所有数的和 因为$n\leq10$,所以数表可以看成$m$个$n ...

  5. Redis Sentinel 高可用部署实践集群

    一.Redis Sentinel 介绍    1.Sentinel     数据库环境搭建,从单机版到主备.再到多数据库集群,我们需要一个高可用的监控:比如Mysql中,我们可能会采用MHA来搭建我们 ...

  6. mysql 注意小结

    char 默认是1 个字符 char(12) 设置是12个字符 不管是中文还是英文或者数字只能有十二个 设置外键时,这时候外键对应的父键的字段要是主键 非空而且是唯一. create table t1 ...

  7. Python之路【第九篇】:Python面向对象

    阅读目录 一.三大编程范式 编程范式即编程的方法论,标识一种编程风格: 大家学习了基本的python语法后,大家可以写python代码了,然后每个人写代码的风格不同,这些不同的风格就代表了不同的流派: ...

  8. vim 自定义设置

    修改系统配置(面对所有用户): root@bogon:~# cd /etc/vim/ root@bogon:/etc/vim# ls vimrc vimrc.tiny root@bogon:/etc/ ...

  9. CF468C Hack It! 构造

    传送门 让人觉得脑子不够用的构造 考虑对于一个区间\([l,r]\)如何让它调整使得最后的结果恰好加上\(1\). 注意到对于一个\(<10^{18}\)的数\(x\),\(f(x+10^{18 ...

  10. NOI2019 退役记

    最终还是在意料之中退役了. 总的来说,这一年确实曲折坎坷,曾踏足山巅,也曾陷入低谷,二者都让我受益良多. 没有太多不甘,水平已经正常发挥,哪敢还有一丝奢求. 省选时其实已经早就做好退役的准备了,但命运 ...