使用Grafana Loki可视化查询应用数据日志
应用场景
Grafana Loki是一种日志聚合系统,旨在为应用程序提供高效、可扩展且成本效益高的日志记录。与传统的日志管理工具不同,Loki专注于索引元数据而非完整的日志内容,从而显著降低了资源使用和复杂性。它与Grafana无缝集成,实现强大的日志可视化和查询功能,使其成为已经使用Prometheus进行指标监控的应用程序的天然选择。传统的日志管理系统由于需要对日志数据进行全文索引,通常需要高资源消耗、复杂的基础设施和昂贵的存储。随着应用程序的扩展,这些系统可能会变得成本高昂且效率低下,使得日志管理和查询变得困难。Grafana Loki通过仅索引日志的元数据(标签)而非整个内容,大幅降低了资源使用,简化了日志管理,并使得与Prometheus和Grafana等现有可观测性工具的集成更加容易,从而实现统一的监控和故障排除。
在本教程中,我们将实现以下目标:
- 了解Grafana Loki日志工具的工作原理。
- 配置Loki以收集各种应用程序日志,并将日志数据推送到Grafana Loki,以便在华为云进一步的分析和查询日志。
前提条件
- 弹性云服务器已绑定弹性公网IP。
- 弹性云服务器所在安全组添加了如表1所示的安全组规则,具体步骤参见为安全组添加安全组规则。
资源与成本规划
|
资源 |
资源说明 |
成本说明 |
|---|---|---|
|
虚拟私有云VPC |
VPC网段:192.168.0.0/16 |
免费 |
|
虚拟私有云子网 |
|
免费 |
|
安全组 |
入方向规则:
|
免费 |
|
弹性云服务器 |
|
ECS涉及以下几项费用:
具体的计费方式及标准请参考计费模式概述。 |
|
||
|
操作流程
使用Grafana Loki可视化查询应用数据日志的操作流程如下:
安装并配置Grafana Loki
- 远程登录ecs-prometheus。
- 执行以下命令,更新仓库。
sudo apt update
- 执行以下命令,安装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
- 执行以下命令,启用Grafana服务。
sudo systemctl start grafana-server sudo systemctl enable grafana-server
- 执行以下命令,安装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
- 执行以下命令,验证Grafana Loki的安装版本。
loki --version
回显如下类似信息:

- 执行以下命令,创建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
- 执行以下命令,修改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 - 执行以下命令,创建Loki服务。
sudo vim /etc/systemd/system/loki.service
- 在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
- 按Esc键退出编辑模式,并输入:wq保存后退出。
- 重新加载Systemd配置,以使新的服务文件生效。
sudo systemctl daemon-reload
- 启动Loki服务并设置为开机自启动。
sudo systemctl start loki.service sudo systemctl enable loki.service
- 检查Loki服务状态,确保它正在运行。
sudo systemctl status loki.service
回显如下类似信息。

在目标节点上安装Promtail代理
- 远程登录弹性云服务器ecs-target-0001。
- 执行以下命令,更新仓库。
sudo apt update
- 执行以下命令,下载二进制文件
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 -
- 执行以下命令,安装Promtail代理。
sudo apt install unzip unzip promtail-linux-amd64.zip sudo mv promtail-linux-amd64 /usr/local/bin/promtail
- 执行以下命令,验证Promtail安装版本。
promtail --version
回显如下类似信息:

- 执行以下命令,配置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 - 按Esc键退出编辑模式,并输入:wq保存后退出。
- 执行以下命令,打开Promtail服务文件。
sudo vim /etc/systemd/system/promtail.service
- 在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
- 按Esc键退出编辑模式,并输入:wq保存后退出。
- 重新加载Systemd配置,以使更改生效。
sudo systemctl daemon-reload
- 启动Promtail服务并设置为开机自启动。
sudo systemctl start promtail.service sudo systemctl enable promtail.service
- 检查Promtail服务状态,确保它正在运行。
sudo systemctl status promtail.service
回显如下类似信息。

在目标节点上创建一个简单的Node.js应用程序
- 远程登录弹性云服务器ecs-target-0002。
- 执行以下命令,安装Node.js。
sudo apt update sudo apt install nodejs npm -y
- 执行以下命令,编辑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/'); }); - 按Esc键退出编辑模式,并输入:wq保存后退出。
- 执行以下命令,创建日志目录。
sudo mkdir -p /var/log/nodejsapp sudo touch /var/log/nodejsapp/app.log sudo chmod 777 /var/log/nodejsapp/app.log
- 执行以下命令,在后台运行app.js应用程序。
sudo node app/app.js &
回显如下类似信息。
Server running at http://localhost:3001/
- 使用浏览器访问“http://服务器IP地址:3001”,访问应用程序。

配置Nginx日志收集任务
- 远程登录弹性云服务器ecs-target-0001。
- 导航到已安装Promtail的目标节点。
sudo apt install nginx sudo systemctl status nginx
- 执行以下命令,配置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 - 执行以下命令,重启Promtail服务。
systemctl restart promtail.service systemctl status promtail.service
结果验证
- 确保Grafana Loki服务在服务器上处于活动和运行状态。
图1 Grafana Loki 服务
- 确保Promtail服务在目标节点上处于活动和运行状态。
图2 Promtail服务
- 确保应用程序正在运行,并多次刷新网页以确保请求次数增加。
图3 在浏览器中访问应用程序1
图4 在浏览器中访问应用程序2
- 在Grafana Loki中添加一个新的数据源连接。
图5 在Grafana Loki中配置新的数据源连接
- 验证应用程序日志是否已推送至Grafana Loki。
结论
在本指南中,我们学习了如何在服务器上安装和配置Loki以收集华为云环境中目标服务器的应用程序日志。我们还学习了如何将日志数据推送到Grafana Loki,并利用 Grafana的内置功能在浏览器中可视化和查询应用程序日志。

