zoukankan      html  css  js  c++  java
  • Docker(七): 安装Loki

    洛基(Loki),是北欧神话中的恶作剧和谎言之神,亦是火神。他是巨人法布提(Farbauti)和女巨人劳菲(Laufey)的儿子,阿萨神族主神奥丁(Odin)的义兄弟,虽然他比奥丁要年轻许多。但他的个性狡猾奸诈,经常出言不逊,与其他神祇争吵不休。他是北欧神话体系里极为重要的神祇之一,他在诸神黄昏扮演重要角色。

    简介

    Loki是受Prometheus启发由Grafana Labs团队最新的开源项目,是水平可扩展,高可用性,多租户的日志聚合系统。 Google go语言开发。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。官方的介绍就是:Like Prometheus, but for logs.,类似于 Prometheus 的日志系统。

    特性

    • 不对日志进行全文索引。Loki中存储的是压缩后的非结构化日志,并且只对元数据建立索引,因此Loki 具有操作简单、低成本的优势。
    • 使用与 Prometheus 相同的标签。Loki通过标签对日志进行索引和分组,这使得日志的扩展和操作效率更高。
    • 特别适合储存 Kubernetes Pod 日志。诸如 Pod 标签之类的元数据会被自动删除和编入索引。
    • Grafana 原生支持。

    Loki 日志系统由以下3个部分组成:

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

    系统架构

    LokiAt

    1. Promtail收集并将日志发送给Loki的 Distributor 组件

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

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

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

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

    Loki与ELK比较

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

    假如系统依赖于ES,建议使用ELK作为日志系统。若系统不依赖ES,选择用Loki。

    安装部署Loki

    使用docker-compose安装

    编写docker-compose.yaml文件

    version: "3"
    
    networks:
      loki:
    
    services:
      loki:
        container_name: loki
        image: grafana/loki:1.5.0
        ports:
          - "3100:3100"
        command: -config.file=/etc/loki/local-config.yaml
        networks:
          - loki
    
      promtail:
        container_name: promtail
        image: grafana/promtail:1.5.0
        volumes:
          - /home/chinda/logs:/var/log
          - /mydata/loki/promtail/promtail.yaml:/etc/promtail/docker-config.yaml
        command: -config.file=/etc/promtail/docker-config.yaml
        networks:
          - loki
    
      grafana:
        container_name: grafana
        image: grafana/grafana:latest
        ports:
          - "3000:3000"
        networks:
          - loki
    

    注意: 数据卷需将promtail.yaml文件创建出来。

    配置promtail.yaml

    server:
      http_listen_port: 9080
      grpc_listen_port: 0
    
    positions:
      filename: /tmp/positions.yaml
    
    clients:
      - url: http://loki:3100/loki/api/v1/push
    
    scrape_configs:
      - job_name: system
        static_configs:
          - targets:
              - localhost
            labels:
              job: varlogs
              __path__: /var/log/*log
    

    运行容器

    docker-compose -f docker-compose.yaml up -d
    

    配置Grafand

    1. 登录到Grafana实例。 如果这第一次运行Grafana,则用户名和密码均默认为admin。
    2. 在Grafana中,通过左侧栏中的齿轮图标提添加数据源。
    3. 选择Loki数据源
    4. 添加监听接口http://loki:3100
    5. 左侧栏中的Explore中选择labels查看日志。

    UI控制台

    http://localhost:3000
    账号:admin
    密码: admin

  • 相关阅读:
    初始nginx(启动运行) 使用nginx做一个简单的静态资源服务器
    redis总结问题
    reids高可用(灾难备份-持久化)
    mybatis中将0识别为null的解决方法
    Spring MVC 通过反射将数据导出到excel
    spring mvc 中Uploadify插件的使用
    java搭建 SpringMVC+Mybatis(SMM)+mybatis-generate
    让ecshop用户名、手机号、email登陆方法
    ecmobile实现支付宝支付和百度云推送遇到的问题及解决方案(android)
    Oracle分页总汇
  • 原文地址:https://www.cnblogs.com/chinda/p/13615430.html
Copyright © 2011-2022 走看看