保姆级教程|Loki+Promtail+Grafana 集成Zabbix 7,统一日志监控门户(全套配置附)

在线答疑:乐维社区

前言

本文详细讲解Loki+Promtail+Grafana整套日志采集、存储、可视化方案的完整部署流程,并实现与 Zabbix 监控平台的菜单跳转集成。该方案部署简便、运维成本低,适用于企业内部服务器日志的统一收集、查询与监控。

部署完成后,运维人员可通过 Zabbix 统一入口直接查看各类系统日志,无需在多个平台间切换,显著提升运维工作效率。本次配置已开启 Grafana 匿名只读访问,日常使用中请严格管控服务器网络权限,保障日志数据安全

1.安装与下载

1.1安装Loki以及Promtail

可以在https://github.com/grafana/loki/releases中下载安装包

解压Loki及promtail至指定目录:

创建目录:mkdir /data/loki

创建目录:mkdir /data/promtail

解压文件:unzip loki-linux-amd64.zip

解压文件:unzip promtail-linux-amd64.zip

1.2添加Loki配置文件:

编辑文件:vim /data/loki/etc/loki.yaml

配置内容如下:

# 认证配置

auth_enabled: false

# 端口配置

server:

# 监听的端口

http_listen_port: 3100

ingester:

lifecycler:

address: 127.0.0.1

ring:

kvstore:

store: inmemory

replication_factor: 1

final_sleep: 0s

chunk_idle_period: 5m

chunk_retain_period: 30s

schema_config:

configs:

- from: 2020-07-29

store: boltdb

object_store: filesystem

schema: v11

index:

prefix: index_

period: 168h

# 存储位置配置

storage_config:

# 流文件存储地址

boltdb:

# 自定义boltdb目录

directory: /data/software/loki/data/index

# 索引存储地址

filesystem:

# 自定义filesystem目录

directory: /data/software/loki/data/chunks

# 采集限制配置

limits_config:

reject_old_samples: true

reject_old_samples_max_age: 168h

# 修改每用户摄入速率限制,即每秒样本量,默认值为4M

ingestion_rate_mb: 30

# 修改每用户摄入速率限制,即每秒样本量,默认值为6M

ingestion_burst_size_mb: 15

allow_structured_metadata: false

# 日志回看配置

chunk_store_config:

# max_look_back_period: 0s

# 回看日志行的最大时间,只适用于即时日志,7天

# 表的保留期配置

# #table_manager:

# retention_deletes_enabled: false

# retention_period: 0s

table_manager:

# 日志保留周期开关,默认false

retention_deletes_enabled: true

# 日志保留周期

retention_period: 168h

1.3启动Loki并查看端口及进程:

启动命令:nohup /data/loki/bin/loki-linux-amd64 -config.file=/data/loki/etc/loki.yaml &

查看端口命令:ss -lnt

查看进程命令:ps -ef |grep loki

1.4添加Promtail配置文件

vim /data/promtail/etc/promtail.yaml

Vim /data/PL/etc/promtail.yaml

# 端口配置

server:

http_listen_port: 9080

grpc_listen_port: 0

# 记录游标位置

positions:

# 游标记录上一次同步位置

filename: /data/promtail/etc/positions.yaml #根据实际路径进行修改

# 每10秒同步一次

sync_period: 10s

# Loki服务器地址

clients:

- url: http://Loki部署主机IP:3100/loki/api/v1/push #根据实际路径进行修改

# 日志文件配置

scrape_configs:

- job_name: zabbix_server #可以根据需要进行修改名称,如Nginx日志可写nginx

static_configs:

- targets:

- localhost

labels:

job: zabbix_server #建议与job_name保持一致以便区分

app: zabbix_server #建议与job_name保持一致以便区分

env: test #标签

log_type: web #日志类型

__path__: /usr/local/zabbix/logs/zabbix_server.log #Zabbix日志所在路径

注:若需配置多个日志,需从“- job_name:”开始完整复制,且缩进需与上述“- job_name”保持一致

启动Promtail

nohup /data/promtail/bin/promtail-linux-amd64 -config.file=/data/promtail/etc/promtail.yaml &

注:每次修改Promtail配置文件后均需重启服务

2.Grafana下载及配置

2.1下载Grafana

可通过官网下载或使用以下链接下载

sudo yum install -y https://dl.grafana.com/grafana-enterprise/release/12.2.0/grafana-enterprise_12.2.0_17949786146_linux_amd64.rpm 通过上述链接进行下载安装完成后,输入部署主机IP:3000即可访问

2.2数据源以及语言配置

2.2.1中文配置

完成上述操作后,选择旁边的“Save”进行保存

以下是可在界面上显示数据的配置

2.2.2配置数据源

按照图片步骤进行配置

输入URL后点击“保存并测试”,出现以下界面表示成功

2.3Grafana日志监控配置

点击“Show logs”后即可在面板中查看日志

还可在查询区域根据字段匹配所需查看的日志

上述设置仅实现日志查看功能,若需保存配置,请按以下步骤操作:

可在仪表盘处进行设置,将需要监控的日志在仪表盘处创建

2.4仪表盘配置

点击“仪表盘”并选择“新建仪表盘

选择刚才新增的“Loki-1

选择“新建仪表盘”后点击“添加可视化

点击“可视化”后,按照以下步骤配置面板,最后点击“保存仪表盘”即可完成配置

下次查看日志时,直接点击相应面板即可

3.Zabbix配置

3.1添加配置文件

1.在Zabbix默认路径/usr/share/zabbix/modules/下创建目录,目录名称可自定义,此处示例命名为zdymk。随后,在zdymk目录下分别创建controllers目录、views目录,并创建manifest.json和Module.php两个配置文件,具体配置内容如下:

1.1 manifest.json配置文件内容:

{

"manifest_version": 2, // Zabbix 7.0 模块格式,必须设置为2

"id": "zdymk", // 模块唯一标识,必须与目录名称一致

"type": "module", // module表示功能模块,widget表示仪表盘小部件

"name": "日志监控", // 模块列表中显示的名称

"namespace": "Zdymk", // PHP命名空间,Zabbix用于拼接类名:Modules\Zdymk\Controllers\MainView

"version": "1.0.0", // 模块版本号

"author": "日志监控", // 作者信息,仅用于显示

"description": "Custom menu module", // 描述信息,仅用于显示

"controllers": {

"zdymk.main": { // 路由名称,对应菜单中的setAction('zdymk.main')

"class": "MainView" // 控制器类名,对应controllers/MainView.php文件

}

},

"assets": {

"js": [], // 自动加载的JS文件,为空则不加载

"css": [] // 自动加载的CSS文件,为空则不加载

}

}

1.2 Module.php配置文件内容:

<?php

declare(strict_types=0); // 关闭严格类型检查

namespace Modules\Zdymk; // 命名空间,必须与manifest.json中的namespace一致

use Zabbix\Core\CModule; // 引入Zabbix模块基类

class Module extends CModule { // 空类定义,必须存在,Zabbix通过此类识别模块

}

2 在controllers目录下创建MainView.php配置文件,配置内容如下:

<?php

declare(strict_types=0);

namespace Modules\Zdymk\Controllers; // 命名空间,manifest.json将按此路径拼接查找该文件

use CController; // 引入Zabbix控制器基类

class MainView extends CController { // 继承基类,必须实现以下三个方法

protected function checkInput(): bool {

return true; // 不校验任何参数,直接放行

}

protected function checkPermissions(): void {

$this->validateLogin(); // 验证用户是否登录,未登录跳转登录页

}

protected function doAction(): void {

$this->setResponse(

new CControllerResponseData([], true) // 生成响应

// [] = 不传任何数据给视图

// true = 不用 Zabbix 默认模板,直接用视图文件渲染

);

}

}

3.于Views目录下添加配置文件zdymk.main.view.php,其内容如下

<?php

declare(strict_types=0); // 关闭严格类型检查

(new CHtmlPage()) // 创建一个 Zabbix 页面对象

->setTitle(_('zdymk')) // 设置页面标题为 "zdymk"

->setBody('<script>window.location.href="http://10.1.1.223:3000/?orgId=1&from=now-6h&to=now&timezone=browser";</script>')

// 页面内容就一行 JS:浏览器直接跳转到 Grafana

->show(); // 输出整个 HTML 页面给浏览器

4.需对Zabbix的配置文件进行相应修改,以下采用默认路径

在/usr/share/zabbix/include/classes/helpers/CMenuHelper.php文件中添加以下内容

// 在 Reports 菜单后面添加约161行

$menu->add(

(new CMenuItem(_('zdymk')))

->setAction('zdymk.main')

);

5.在grafana.ini配置文件中修改以下内容,路径为/etc/grafana/grafana.ini

[auth.anonymous]

enabled = true # 允许匿名访问(不登录也能看)

org_role = Viewer # 匿名用户只有只读权限

[security]

allow_embedding = true # 允许被 iframe 嵌入

cookie_samesite = none # 允许跨站嵌入(Zabbix 和 Grafana 不同域名/端口)

完成以上配置后,需进一步配置Zabbix的Web界面

3.2启用新增模块

1.以下为Zabbix 7版本的配置方法,6版本操作类似

在管理设置中找到模块,点击模块后,于右上角点击扫描目录,即可发现前述新增目录,点击启用目录即可

3.3跳转验证

启用后刷新界面,日志监控将显示于菜单中,点击日志监控会自动跳转至Grafana监控界面,点击Dashboards即可查看上述监控的日志信息,此方法建议采用匿名访问模式,用户无需登录即可查看数据,但仅具备读取权限,不拥有写入权限。在此过程中,需特别注意数据安全防护哦

以上就是今天的内容了,觉得不错的记得点赞哦