在本博客中,我们将集成 Loki、Promtail 和 Grafana。

Promtail-Loki-Grafana 是一种端到端的日志记录解决方案,用于获取日志以在集中位置进行可视化。在进入服务集成之前,我们将从了解每个组件的角色开始。

促销

Promtail 是一种代理,可将本地日志的内容传送到私有 Grafana Loki 实例或 Grafana Cloud。它通常部署到每台需要监控应用程序的机器上。

它主要是

  • 发现目标

  • 将标签附加到日志流

  • 将它们推送到 Loki 实例。

洛基

Loki 是一个受 Prometheus 启发的水平可扩展、高可用、多租户日志聚合系统。它的设计非常具有成本效益且易于操作。它不索引日志的内容,而是为每个日志流设置一组标签。

格拉法纳

Grafana 是多平台开源分析和交互式可视化 Web 应用程序。当连接到受支持的数据源时,它会为 Web 提供图表、图形和警报。

概述

image.png

Promtail 实例将从机器中获取日志文件,并将其推送到 Loki 实例。 Loki 将隔离原木并在其上贴上标签。一旦日志在 Loki 可用,我们就可以将数据源添加到 Grafana 以将其可视化。我们可以在下面看到端到端的配置。我们将使用 docker-compose 来部署所有组件。

1\。创建 Promtail 配置

promtail-config.yaml
--------------------------------------------------------------------

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

在 URL 字段下为 Loki 配置推送 API。添加需要监控的日志文件路径的_path_。

2\。创建 Loki 配置

loki-config.yaml
--------------------------------------------------------------------
auth_enabled: false
server:
  http_listen_port: 3100
  grpc_listen_port: 9096
ingester:
  wal:
    enabled: true
    dir: /tmp/wal
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 1h       # Any chunk not receiving new logs in this time will be flushed
  max_chunk_age: 1h           # All chunks will be flushed when they hit this age, default is 1h
  chunk_target_size: 1048576  # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first
  chunk_retain_period: 30s    # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)
  max_transfer_retries: 0     # Chunk transfers disabled
schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h
storage_config:
  boltdb_shipper:
    active_index_directory: /tmp/loki/boltdb-shipper-active
    cache_location: /tmp/loki/boltdb-shipper-cache
    cache_ttl: 24h         # Can be increased for faster performance over longer query periods, uses more disk space
    shared_store: filesystem
  filesystem:
    directory: /tmp/loki/chunks
compactor:
  working_directory: /tmp/loki/boltdb-shipper-compactor
  shared_store: filesystem
limits_config:
  reject_old_samples: true
  reject_old_samples_max_age: 168h
chunk_store_config:
  max_look_back_period: 0s
table_manager:
  retention_deletes_enabled: false
  retention_period: 0s
ruler:
  storage:
    type: local
    local:
      directory: /tmp/loki/rules
  rule_path: /tmp/loki/rules-temp
  alertmanager_url: http://localhost:9093
  ring:
    kvstore:
      store: inmemory
  enable_api: true

对于这个演示,我们将数据存储在内存中。其他可以使用的商店是;

  • 亚马逊 DynamoDB

  • 谷歌大表

  • Apache Cassandra

  • 亚马逊 S3

  • 谷歌云存储

3\。创建 Docker Compose 文件

docker-compose.yml
--------------------------------------------------------------------
version: "3"
networks:
  loki:
services:
  loki:
    image: grafana/loki:latest
    ports:
      - "3100:3100"
    volumes:
      - /etc/loki:/etc/loki
    command: -config.file=/etc/loki/loki-config.yaml
    networks:
      - loki
promtail:
    image: grafana/promtail:latest
    volumes:
      - /etc/promtail:/var/log
      - /etc/promtail:/etc/promtail 
    command: -config.file=/etc/promtail/promtail-config.yaml
    networks:
      - loki
grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    networks:
      - loki

使用公共网络配置所有服务。对于此示例,它是 Loki。将卷添加到所有服务以获取配置文件和日志文件。将端口映射添加到 Loki 和 Grafana。

4\。运行 Docker 文件。

docker-compose up

在 docker-compose 文件所在的目录中运行上述命令。一旦你运行它,所有的容器都会启动'

⠿ Container promtail-loki-grafana-using-docker-compose-loki-1      Created                                                                      0.0s
 ⠿ Container promtail-loki-grafana-using-docker-compose-promtail-1  Created                                                                      0.0s
 ⠿ Container promtail-loki-grafana-using-docker-compose-grafana-1   Created

5\。测试服务

通过点击localhost:3100/ready测试 Loki 服务

image.png如果您收到上述响应,您的 Loki 和 Promtail 配置成功。

在 Grafana 中添加 Loki 作为数据源登录到localhost:3000。

默认密码:admin

默认用户:管理员

在数据源配置中添加 Loki URL。

image.png保存并测试连接。

6\。可视化日志。

单击探索并选择 Loki 作为数据源。添加所需的过滤器以获取确切的日志文件。

image.png

点击显示日志。

image.png

最后,可以在仪表板中看到日志。

谢谢阅读。我希望这个故事对您有所帮助。有兴趣的可以看看我的其他文章。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐