文档首页/ 弹性云服务器 ECS/ 最佳实践/ 云服务器运维与监控/ 使用Grafana Loki可视化查询应用数据日志
更新时间:2026-01-05 GMT+08:00
分享

使用Grafana Loki可视化查询应用数据日志

应用场景

Grafana Loki是一种日志聚合系统,旨在为应用程序提供高效、可扩展且成本效益高的日志记录。与传统的日志管理工具不同,Loki专注于索引元数据而非完整的日志内容,从而显著降低了资源使用和复杂性。它与Grafana无缝集成,实现强大的日志可视化和查询功能,使其成为已经使用Prometheus进行指标监控的应用程序的天然选择。传统的日志管理系统由于需要对日志数据进行全文索引,通常需要高资源消耗、复杂的基础设施和昂贵的存储。随着应用程序的扩展,这些系统可能会变得成本高昂且效率低下,使得日志管理和查询变得困难。Grafana Loki通过仅索引日志的元数据(标签)而非整个内容,大幅降低了资源使用,简化了日志管理,并使得与Prometheus和Grafana等现有可观测性工具的集成更加容易,从而实现统一的监控和故障排除。

在本教程中,我们将实现以下目标:

  • 了解Grafana Loki日志工具的工作原理。
  • 配置Loki以收集各种应用程序日志,并将日志数据推送到Grafana Loki,以便在华为云进一步的分析和查询日志。

前提条件

  1. 弹性云服务器已绑定弹性公网IP。
  2. 弹性云服务器所在安全组添加了如表1所示的安全组规则,具体步骤参见为安全组添加安全组规则
    表1 安全组规则

    方向

    优先级

    策略

    类型

    协议端口

    源地址

    入方向

    1

    允许

    IPv4

    TCP: 3001

    0.0.0.0/0

    入方向

    1

    允许

    IPv4

    TCP: 3100

    0.0.0.0/0

    入方向

    1

    允许

    IPv4

    TCP: 9093

    0.0.0.0/0

资源与成本规划

表2 资源和成本规划

资源

资源说明

成本说明

虚拟私有云VPC

VPC网段:192.168.0.0/16

免费

虚拟私有云子网

  • 可用区:可用区1
  • 子网网段:192.168.0.0/24

免费

安全组

入方向规则:
  • 优先级:1
  • 策略:允许
  • 类型:IPv4
  • 协议端口:ICMP: 全部
  • 源地址:0.0.0.0/0

免费

弹性云服务器

  • 名称:ecs-prometheus
  • 计费模式:包年/包月
  • 可用区:可用区1
  • 规格:c7n.xlarge.4
  • 镜像:Ubuntu 22.04 server 64bit
  • 系统盘:40G
  • 弹性公网IP:现在购买
  • 线路:全动态BGP
  • 公网带宽:按流量计费
  • 带宽大小:5 Mbit/s

ECS涉及以下几项费用:

  • 云服务器
  • 云硬盘
  • 弹性公网IP

具体的计费方式及标准请参考计费模式概述

  • 名称:ecs-target-0001
  • 计费模式:包年/包月
  • 可用区:可用区1
  • 规格:s7n.xlarge.2
  • 镜像:Ubuntu 22.04 server 64bit
  • 系统盘:40G
  • 弹性公网IP:现在购买
  • 线路:全动态BGP
  • 公网带宽:按流量计费
  • 带宽大小:5 Mbit/s
  • 名称:ecs-target-0002
  • 计费模式:包年/包月
  • 可用区:可用区1
  • 规格:s7n.xlarge.2
  • 镜像:Ubuntu 22.04 server 64bit
  • 系统盘:40G
  • 弹性公网IP:现在购买
  • 线路:全动态BGP
  • 公网带宽:按流量计费
  • 带宽大小:5 Mbit/s

安装并配置Grafana Loki

  1. 远程登录ecs-prometheus。
  2. 执行以下命令,更新仓库。
    sudo apt update
  3. 执行以下命令,安装Grafana。
    wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
    sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
    sudo apt update
    sudo apt install grafana
  4. 执行以下命令,启用Grafana服务。
    sudo systemctl start grafana-server
    sudo systemctl enable grafana-server
  5. 执行以下命令,安装Grafana Loki。
    curl -s https://api.github.com/repos/grafana/loki/releases/latest | grep browser_download_url |  cut -d '"' -f 4 | grep loki-linux-amd64.zip | wget -i -
    sudo apt install unzip
    unzip loki-linux-amd64.zip
    sudo mv loki-linux-amd64 /usr/local/bin/loki
  6. 执行以下命令,验证Grafana Loki的安装版本。
    loki --version

    回显如下类似信息:

  7. 执行以下命令,创建Grafana Loki配置文件。
    sudo mkdir -p /data/loki
    sudo wget -O /etc/loki-local-config.yaml https://raw.githubusercontent.com/grafana/loki/v3.1.1/cmd/loki/loki-local-config.yaml
  8. 执行以下命令,修改Grafana Loki配置文件。
    sudo vim /etc/loki-local-config.yaml

    配置文件内容如下:

    auth_enabled: false
    server:
      http_listen_port: 3100
      grpc_listen_port: 9096
    common:
      instance_addr: 127.0.0.1
      path_prefix: /tmp/loki
      storage:
        filesystem:
          chunks_directory: /tmp/loki/chunks
          rules_directory: /tmp/loki/rules
      replication_factor: 1
      ring:
        kvstore:
          store: inmemory
    query_range:
      results_cache:
        cache:
          embedded_cache:
            enabled: true
            max_size_mb: 100
    schema_config:
      configs:
        - from: 2020-10-24
          store: tsdb
          object_store: filesystem
          schema: v13
          index:
            prefix: index_
            period: 24h
    ruler:
      alertmanager_url: http://localhost:9093    //此处的localhost替换为ecs-target-0001的弹性公网IP
  9. 执行以下命令,创建Loki服务。
    sudo vim /etc/systemd/system/loki.service
  10. 在loki.service文件中添加以下内容:
    [Unit]
    Description=Loki service
    After=network.target
    
    [Service]
    Type=simple
    User=root
    ExecStart=/usr/local/bin/loki -config.file /etc/loki-local-config.yaml
    
    [Install]
    WantedBy=multi-user.target
  11. Esc键退出编辑模式,并输入:wq保存后退出。
  12. 重新加载Systemd配置,以使新的服务文件生效。
    sudo systemctl daemon-reload
  13. 启动Loki服务并设置为开机自启动。
    sudo systemctl start loki.service
    sudo systemctl enable loki.service
  14. 检查Loki服务状态,确保它正在运行。
    sudo systemctl status loki.service

    回显如下类似信息。

在目标节点上安装Promtail代理

  1. 远程登录弹性云服务器ecs-target-0001。
  2. 执行以下命令,更新仓库。
    sudo apt update
  3. 执行以下命令,下载二进制文件
    curl -s https://api.github.com/repos/grafana/loki/releases/latest | grep browser_download_url |  cut -d '"' -f 4 | grep promtail-linux-amd64.zip | wget -i -
  4. 执行以下命令,安装Promtail代理。
    sudo apt install unzip
    unzip promtail-linux-amd64.zip
    sudo mv promtail-linux-amd64 /usr/local/bin/promtail
  5. 执行以下命令,验证Promtail安装版本。
    promtail --version

    回显如下类似信息:

  6. 执行以下命令,配置Promtail。
    cd /etc
    wget https://raw.githubusercontent.com/grafana/loki/v3.1.1/clients/cmd/promtail/promtail-local-config.yaml
    sudo vim promtail-local-config.yaml

    配置文件内容如下:

    server:
      http_listen_port: 9080
      grpc_listen_port: 0
    
    positions:
      filename: /data/loki/positions.yaml
    
    clients:
      - url: http://localhost:3100/loki/api/v1/push   //此处的localhost替换为ecs-prometheus的弹性公网IP
    
    scrape_configs:
    - job_name: system
      static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*log
  7. Esc键退出编辑模式,并输入:wq保存后退出。
  8. 执行以下命令,打开Promtail服务文件。
    sudo vim /etc/systemd/system/promtail.service
  9. 在promtail.service文件中添加以下内容:
    [Unit]
    Description=Promtail service
    After=network.target
    
    [Service]
    Type=simple
    User=root
    ExecStart=/usr/local/bin/promtail -config.file /etc/promtail-local-config.yaml
    
    [Install]
    WantedBy=multi-user.target
  10. Esc键退出编辑模式,并输入:wq保存后退出。
  11. 重新加载Systemd配置,以使更改生效。
    sudo systemctl daemon-reload
  12. 启动Promtail服务并设置为开机自启动。
    sudo systemctl start promtail.service
    sudo systemctl enable promtail.service
  13. 检查Promtail服务状态,确保它正在运行。
    sudo systemctl status promtail.service

    回显如下类似信息。

在目标节点上创建一个简单的Node.js应用程序

  1. 远程登录弹性云服务器ecs-target-0002。
  2. 执行以下命令,安装Node.js。
    sudo apt update
    sudo apt install nodejs npm -y
  3. 执行以下命令,编辑Node.js文件。
    sudo mkdir app
    sudo vim app/app.js

    配置文件内容如下:

    const http = require('http');
    const fs = require('fs');
    
    let requestCounter = 0;
    
    const server = http.createServer((req, res) => {
        requestCounter++;
        const logMessage = `Request #${requestCounter} received at ${new Date()}\n`;
    
        fs.appendFile('/var/log/nodejsapp/app.log', logMessage, (err) => {
            if (err) {
                console.error('Error writing to log file:', err);
            }
        });
    
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end(`Hello, World!\nTotal requests: ${requestCounter}`);
    });
    
    server.listen(3001, () => {
        console.log('Server running at http://localhost:3001/');
    });
  4. Esc键退出编辑模式,并输入:wq保存后退出。
  5. 执行以下命令,创建日志目录。
    sudo mkdir -p /var/log/nodejsapp
    sudo touch /var/log/nodejsapp/app.log
    sudo chmod 777 /var/log/nodejsapp/app.log
  6. 执行以下命令,在后台运行app.js应用程序。
    sudo node app/app.js &

    回显如下类似信息。

    Server running at http://localhost:3001/
  7. 使用浏览器访问“http://服务器IP地址:3001”,访问应用程序。

配置Nginx日志收集任务

  1. 远程登录弹性云服务器ecs-target-0001。
  2. 导航到已安装Promtail的目标节点。
    sudo apt install nginx
    sudo systemctl status nginx
  3. 执行以下命令,配置Promtail日志收集任务。
    sudo vim /etc/promtail-local-config.yaml

    配置文件内容如下:

    server:
      http_listen_port: 9080
      grpc_listen_port: 0
    
    positions:
      filename: /tmp/positions.yaml
    
    clients:
      - url: http://localhost:3100/loki/api/v1/push   //此处的localhost替换为ecs-prometheus的弹性公网IP
    
    scrape_configs:
      - job_name: system
        static_configs:
          - targets:
              - localhost
            labels:
              job: varlogs
              __path__: /var/log/*log
  4. 执行以下命令,重启Promtail服务。
    systemctl restart promtail.service
    systemctl status promtail.service

结果验证

  1. 确保Grafana Loki服务在服务器上处于活动和运行状态。
    图1 Grafana Loki 服务
  2. 确保Promtail服务在目标节点上处于活动和运行状态。
    图2 Promtail服务
  3. 确保应用程序正在运行,并多次刷新网页以确保请求次数增加。
    图3 在浏览器中访问应用程序1
    图4 在浏览器中访问应用程序2
  4. 在Grafana Loki中添加一个新的数据源连接。
    图5 在Grafana Loki中配置新的数据源连接
  5. 验证应用程序日志是否已推送至Grafana Loki。
    1. 在Grafana仪表板中单击“Explore”。
    2. 设置标签过滤器,单击“Execute”按钮执行日志查询。

      此时能够看到日志存储在Grafana Loki中,并且接收到的请求次数表示从互联网访问应用程序的次数。

      图6 在Grafana Loki中查看应用程序数据日志
      图7 日志详情

结论

在本指南中,我们学习了如何在服务器上安装和配置Loki以收集华为云环境中目标服务器的应用程序日志。我们还学习了如何将日志数据推送到Grafana Loki,并利用 Grafana的内置功能在浏览器中可视化和查询应用程序日志。

相关文档