在线答疑:乐维社区

前言

本文详细讲解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.3 Grafana日志监控配置

点击“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即可查看上述监控的日志信息,此方法建议采用匿名访问模式,用户无需登录即可查看数据,但仅具备读取权限,不拥有写入权限。在此过程中,需特别注意数据安全防护哦

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐