保姆级教程|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即可查看上述监控的日志信息,此方法建议采用匿名访问模式,用户无需登录即可查看数据,但仅具备读取权限,不拥有写入权限。在此过程中,需特别注意数据安全防护哦
以上就是今天的内容了,觉得不错的记得点赞哦