07--Zabbix监控告警

前言:和普米一样运维必会的技能,这里总结一下,适用范围非常广泛,有图形化界面,能帮助运维极快确定问题所在,这里记录下概念和基础操作。

1、zabbix简介

Zabbix是一个基于 Web 界面的企业级开源解决方案,提供分布式系统监控和网络监控功能。它能够监视各种网络参数,确保服务器系统的安全运行,并通过灵活的通知机制让系统管理员快速定位和解决问题。Zabbix由两部分组成:Zabbix Server 和可选组件 Zabbix Agent。Zabbix Server 可以通过 SNMP、Zabbix Agent、Ping、端口监视等方法,对远程服务器和网络状态进行监控和数据收集。它支持多平台运行,为系统管理员提供强大而灵活的监控工具。

监控信息的收集方式分为主动模式和被动模式(实际工作中通常两种模式都启用)。被动模式主要依赖监控对象上报故障,其优点是占用资源少,但缺点是及时性差,无法应对通信中断等情况。而主动模式则是定时检查业务状态,其缺点是占用资源较高,但优点在于可以从业务角度测试服务,确保了监测数据的及时性。

2、zabbix服务器部署

两个节点都有部署行为,阅读此篇文章需注意主机名区别!!!

2.1、实验环境

防火墙和selinux根据需要放行或直接关闭

IP主机名角色
192.168.189.150zabbix_serverzabbix服务器/监控服务器
192.168.189.151web1业务服务器/被监控服务器

2.2、准备zabbix源

官网地址:Zabbix:企业级开源监控解决方案

操作如下

 本次使用国内镜像源完成部署

这里建议搞个centos7和epel的国内源,阿里清华都可以

[root@zabbix_server ~]# vim /etc/yum.repos.d/zabbix.repo
[root@zabbix_server ~]# cat /etc/yum.repos.d/zabbix.repo
[zabbix]
name=tsinghua_zabbix
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/
gpgcheck=0
enabled=1[zabbix2]
name=tsinghua_zabbix_frontend
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/frontend/
gpgcheck=0
enabled=1
[root@zabbix_server ~]# yum clean all[root@zabbix_server ~]# yum makecache

2.3、安装zabbix服务器

[root@zabbix_server ~]# yum install -y zabbix-server-mysql zabbix-agent# zabbix-server-mysql:数据库# zabbi-agent:代理程序(上报信息的程序)[root@zabbix_server ~]# yum install -y centos-release-scl#centos插件[root@zabbix_server ~]# yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl#数据库插件和前台界面

2.4、数据库部署

[root@zabbix_server ~]# yum -y install mariadb mariadb-server
[root@zabbix_server ~]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@zabbix_server ~]#  systemctl start mariadb

2.5、授权zabbix账号

[root@zabbix_server ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> create user zabbix@localhost identified by 'Liumuquan@123';
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
Query OK, 0 rows affected (0.00 sec)#授予 zabbix 用户对 zabbix 数据库的全部权限MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> quit;

2.6、初始化zabbix

[root@zabbix_server ~]# zcat /usr/share/doc/zabbix-server-mysql-5.0.42/create.sql.gz | mysql -uzabbix -p'Liumuquan@123' zabbix使用 zcat 解压并读取 Zabbix 提供的数据库创建脚本 create.sql.gz。
通过管道,将解压缩后的SQL内容传递给 mysql 客户端。
使用 zabbix 用户和其密码 Liumuquan@123 连接到 zabbix 数据库。
在 zabbix 数据库中执行 create.sql.gz 中包含的所有SQL语句,以创建或初始化 Zabbix 所需的数据库结构和表

2.7、配置mysql账号密码

[root@zabbix_server ~]# vim /etc/zabbix/zabbix_server.conf 
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Liumuquan@123

2.8、启动zabbix

[root@zabbix_server ~]# systemctl enable zabbix-server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.[root@zabbix_server ~]# systemctl start zabbix-server.service

2.9、php配置

[root@zabbix_server ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf 
[root@zabbix_server ~]# tail -1  /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf 
php_value[date.timezone] = Asia/Shanghai#修改时区配置[root@zabbix_server ~]# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
[root@zabbix_server ~]# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/rh-php72-php-fpm.service to /usr/lib/systemd/system/rh-php72-php-fpm.service.

2.10、web访问

环境检查

 数据库信息配置

zabbix服务器命名

 信息汇总

 登录zabbix(默认用户名/密码)

初始状态为全英文页面,修改语言方式如下

更改后效果如下

3、业务服务器部署

3.1、基础环境配置

将zabbix服务器的源通过scp拷贝至本机

[root@zabbix_server ~]# scp /etc/yum.repos.d/* root@192.168.189.151:/etc/yum.repos.d/

开始安装并配置

[root@web1 ~]# yum -y install zabbix-agent
[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.conf 
Server=192.168.189.150
ServerActive=192.168.189.150
Hostname=web1#    语法#    Server=zabbix_ip1,zabbix_ip2#    ServerActive=zabbix_ip1,zabbix_ip2#    Hostname=web1 这里可以写变量 $HOSTNAME

启动zabbix

[root@web1 ~]# systemctl start zabbix-agent
[root@web1 ~]# systemctl enable zabbix-agent

此时双方zabbix已部署完成

4、命令行测试

在zabbix服务器上通过zabbix_get 命令行监控,zabbix5默认没有安装zabbix_get(5以前的版本自带)需要单独安装

[root@zabbix_server ~]# yum install -y zabbix-get

命令测试

[root@zabbix_server ~]# zabbix_get -s 192.168.189.151 -k system.uname
Linux web1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64#-s <agent_ip>:指定 Zabbix Agent 的 IP 地址或主机名。#-k <key>:指定要获取的监控项键(key)。[root@zabbix_server ~]# zabbix_get -s 192.168.189.151 -k system.cpu.load[all,avg15]
0.050000#    过去 15 分钟所有 CPU 的平均负载

5、图形监控

创建主机组

 

 添加主机

此时主机并未有指明的监控项,为主机添加监控模板

 这里选择基础网站模板

 选择完成后zabbix已经产生告警(web1为全新环境未安装网站)

给web1装个网站程序模拟排除告警

[root@web1 ~]# yum install -y nginx
[root@web1 ~]# systemctl start nginx
[root@web1 ~]# systemctl enable nginx

等待数秒后,显示已解决

创建图形

配置——主机——web1_liumuquan——图形——创建图形

 

此处乱码为修改语言环境所致,尽量不要尝试修复!!!

6、模板(Template)

在 Zabbix 中,模板是一个非常重要的概念,用于统一和简化监控配置。模板包含一组预定义的监控项、触发器、图形、屏幕、发现规则和其他相关元素,可以应用到多个主机上,从而避免重复配置和管理。

  • 主机:监控对象
  • 应用集(Applications):应用集用于对监控项进行分组,以便更好地组织和管理。例如,可以将所有与数据库相关的监控项放在一个应用集中
  • 监控项(Items):监控项是模板中的基础元素,用于定义从主机收集的数据类型和方法。例如,CPU 使用率、内存使用情况、磁盘 I/O 等。
  • 触发器(Triggers):触发器是基于监控项的逻辑条件,用于定义何时生成告警。例如,当 CPU 使用率超过90%时触发告警。
  • 图形(Graphs):图形用于将监控数据可视化。模板可以包含预定义的图形,以便在应用模板后自动提供数据的图形化展示。
  • 聚合图形(Screens):屏幕是由多个图形和其他元素组成的仪表板,用于提供更全面的监控视图。
  • 自动发现:通过使用模板,可以确保不同主机上的监控配置一致性,并且可以轻松地将监控配置应用到新添加的主机上。这样不仅减少了工作量,还降低了人为错误的风险。如添加一整个网段的服务器。
  • web监测:独立监测几乎没用过

下面会对模板元素进行详细的解析

7、监控项(Zabbix Items)

7.1、监控项详解

监控项的定义配置可以细分为以下几个维度

配置名称详细解释
获取监控项数据方式

1)zabbix-agent

2)SNMP-简单的网际管理协议(一般用在路由器或交换机上)

取值的类型和基础单位磁盘容量单位一般为B,网卡bps,mysql的查询统计qps,cpu的ips或%等
监控key(键值)组合命令,由zabbix集成,大部分只需选择即可
获取数据的间隔工作中一般为5-30分钟,本次实验间隔越短越好
历史数据保存的时间/
趋势数据保存的时间/

如下所示

 

7.2、增加监控项(1)

增加监控项:监控服务器启动分区剩余空间

常规查询方式

zabbix监控方式

7.2.1、创建模板

7.2.2、新增监控项

 查看新增的监控项

7.2.3、新增图形

7.2.4、关联主机与模板

模板关联完成

7.2.5、观察最新数据

查看图形

通过写入文件改变剩余分区大小,观察监控结果

[root@web1 ~]# dd if=/dev/zero of=/boot/1.txt bs=1M count=300
记录了300+0 的读入
记录了300+0 的写出
314572800字节(315 MB)已复制,0.788679 秒,399 MB/秒

7.3、增加监控项(2)

增加监控项:服务器网络接口进出流量

 

添加图形

7.4、自定义监控项

自定义监控项即自定义键值key,zabbix自带key有限,有些值需要通过自定义才能完成收集。

操作如下:

添加监控项:mysql被查询次数

[root@web1 ~]# yum -y install mariadb-server mariadb
[root@web1 ~]# systemctl start mariadb
[root@web1 ~]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.[root@web1 ~]# mysqladmin -uroot status
Uptime: 128  Threads: 1  Questions: 2  Slow queries: 0  Opens: 0  Flush tables: 2  Open tables: 26  Queries per second avg: 0.015#    此处Questions为数据库启动后被查询次数,该值位于“第六项”[root@web1 ~]# mysqladmin -uroot status | awk '{print $6}'
3
[root@web1 ~]# mysqladmin -uroot status | awk '{print $6}'
4
[root@web1 ~]# mysqladmin -uroot status | awk '{print $6}'
5#    此处每执行一次也视为一次查询#    将此条命令保存

 配置zabbix客户端(被监控端)配置文件

[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/customkey_mysql.conf#    customkey_mysql.conf中conf为固定格式不可更改[root@web1 ~]# cat /etc/zabbix/zabbix_agentd.d/customkey_mysql.conf
UserParameter=mysql.questions,mysqladmin -uroot status | awk '{print $6}'#    UserParameter固定值不可能更改#    mysql.questions是key名字,可自定义

初步测试配置是否正确

[root@web1 ~]# zabbix_agentd -t mysql.questions
mysql.questions                               [t|7]

测试成功后重启客户端程序,加载新增的key,按照增加监控项的操作添加

添加图形

 在被监控端执行一万次

for i in {1..10000}; do mysqladmin -uroot status; done

查看效果

8、触发器(Triggers)

触发器用于定义item的报警阈值

操作如下:

先添加一个方便设置触发器的监控项如cpu负载,并添加图形

 在被监控端创造较大文件,观察图形

[root@web1 ~]# dd if=/dev/zero of=/1.txt bs=1M count=3000
记录了3000+0 的读入
记录了3000+0 的写出
3145728000字节(3.1 GB)已复制,37.0871 秒,84.8 MB/秒

监控项正常,设置触发器

 

添加完成后回到对应的图形界面,在图中可以看到设定的触发器阈值的标记

 尝试触发告警,观察告警

9、动作(Zabbix Action)

Zabbix Action是指当某个触发器状态发生改变(如Problem、OK),可以采取相应的动作,大多为告警或执行预设命令。现在在公司常用的告警多为邮箱告警或微信告警,具体部署过程将在下方演示。

9.1、邮件告警部署

9.1.1、邮箱配置

注册一个126邮箱,并开启用于给程序登录使用的pop3授权码

按照操作提示开启pop3授权码,找个记事本将授权码保存下来稍后会使用。

9.1.2、设置zabbix邮箱

首先测试zabbix服务端和邮箱服务器的连通性

[root@zabbix_server ~]# nc smtp.126.com -t 25
220 126.com Anti-spam GT for Coremail System (126com[20140526])421 closing transmission channel

进入zabbix的web界面,创建媒体类型

 

 9.1.3、创建用户组

 9.1.4、创建用户

创建用户同时完成用户与用户组,与自定义告警类型的关联

先不要点击添加,先配置报警媒介

9.1.5、告警设置

此时未配置触发告警后zabbix需要做什么,此时点击添加会报错

常用内置变量(宏)

{TRIGGER.DESCRIPTION}        触发器描述

{TRIGGER.NAME}        触发器名称

{TRIGGER.EVENTS.ACK}        事件是否确认

宏可以自定义或引用

9.1.6、查看告警

尝试触发告警后,观察邮箱内容,这里设置的是cpu负载大于0.6

我们回到zabbix控制台可以观察,异常发生后zabbix的动作

9.2、远程执行

当问题发生,可以通过远程执行命令的方式对目标主机进行控制。

操作步骤如下

9.2.1、创建动作

9.2.2、开启zabbix远程执行

客户端操作

[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.conf 
[root@web1 ~]# cat /etc/zabbix/zabbix_agentd.conf | grep EnableRemoteCommands=1#    添加如下内容
EnableRemoteCommands=1
[root@web1 ~]# systemctl restart zabbix-agent.service

9.2.3、权限设置

客户端操作

[root@web1 ~]# visudo #    在下面添加如下内容
[root@web1 ~]# tail -1  /etc/sudoers
zabbix ALL=NOPASSWD: /usr/bin/systemctl restart nginx

9.2.4、测试动作

关闭客户端nginx,查看状态却为启动或启动中

 查看zabbix状态

 小节实验完成,在公司内部可以通过构建不同的动作达成不同效果,如电话告警,短信告警,微信告警(这三项目前需要收费),也可以通过远程执行不同的脚本完成各种需求。

10、自动发现及自动注册

为了满足监控企业成千上万台服务器,因此我们需要使用Zabbix批量监控来实现。自动发现和自动注册。

清理前面注册的主机

主机列表状态

10.1、自动发现

10.1.1、创建自动发现规则

10.1.2、创建自动发现动作

添加时可以完成的操作配置

 观察自动发现

10.2、自动注册

由客户端主动发起,客户端必须安装并启动Agent,否则无法被自动注册添加至主机列表。

10.2.1、创建自动注册动作

10.2.2、根据主机名称注册

10.3、 查看新增的主机

总结:至此zabbix的概念和基础操作就结束了,下一章会将近些年工作中对于不同项目的实际监控步骤总结一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】C++入门的杂碎知识点

思维导图大纲&#xff1a; namespac命名空间 什么是namespace命名空间namespace命名空间有什么用 什么是命名空间 namespace命名空间是一种域&#xff0c;它可以将内部的成员隔绝起来。举个例子&#xff0c;我们都知道有全局变量和局部变量&#xff0c;全局变量存在于全局域…

SQLAlchemy:filter()和filter_by()的微妙差异

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Python编程中&#xff0c;SQLAlchemy是一个强大的ORM&#xff08;对象关系映射&#xff09;工具&#xff0c;它允许使用Python代码来操作数据库。然而&#xff0c;对于新手来说&#xff0c;SQLAlchemy中的一些函数…

mybatis-plus使用拦截器实现sql完整打印

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 在使用mybatis-plus&#xff08;mybatis&#xff09;的时候&#xff0c;往往需要…

英伟达开源最强通用模型Nemotron-4 340B:开启AI合成数据新纪元

【震撼发布】 英伟达最新力作——Nemotron-4 340B,一个拥有3400亿参数的超级通用模型,震撼登场!这不仅是技术的一大飞跃,更是AI领域的一次革命性突破! 【性能卓越】 Nemotron-4 340B以其卓越的性能超越了Llama-3,专为合成数据而生。它将为医疗健康、金融、制造、零售等行…

Studio One 6.6.2 for Mac怎么激活,有Studio One 6激活码吗?

如果您是一名音乐制作人&#xff0c;您是否曾经为了寻找一个合适的音频工作站而苦恼过&#xff1f;Studio One 6 for Mac是一款非常适合您的MacBook的音频工作站。它可以帮助您轻松地录制、编辑、混音和发布您的音乐作品。 Studio One 6.6.2 for Mac具有直观的界面和强大的功能…

C++初学者指南第一步---1. C++开发环境设置

C初学者指南第一步—1. C开发环境设置 目录 C初学者指南第一步---1. C开发环境设置1.1 工具1.1.1 代码编辑器和IDE1.1.2 Windows1.1.3 命令行界面 1.2 编译器1.2.1 gcc/g (支持Linux/Windows/MacOSX)1.2.2 clang/clang (支持Linux/Windows/MacOS)1.2.3 Microsoft Visual Studio…

《面向对象程序设计》第3章 类与对象(判断、选择、填空)-练习

1-1 常量对象可以使用常量成员函数。 T F | 参考答案 答案 T 2分 1-2 在定义常量成员函数和声明常量成员函数时都应该使用const关键字。 T F | 参考答案 答案 T 2分 1-3 对象间赋值将调用拷贝构造函数。 T F | 参考答案 答案 F 2分 1-4 对象数组生命期…

奇思妙想-可以通过图片闻见味道的设计

奇思妙想-可以通过图片闻见味道的设计 偷闲半日享清闲&#xff0c;炭火烧烤乐无边。肉串飘香引客至&#xff0c;笑语欢声绕云间。人生难得几回醉&#xff0c;且把烦恼抛九天。今宵共饮开怀酒&#xff0c;改日再战新篇章。周四的傍晚&#xff0c;难得的闲暇时光让我与几位挚友相…

PAT B1026. 程序运行时间

题目描述 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock(&#xff09;函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK——给出了机器时钟每秒所走的时钟打点数…

继电器的保护二极管如何选择

继电器在实际应用中&#xff0c;通常都会使用三极管或MOS管控制&#xff0c;其最基本的应用电路如图&#xff1a; 那为什么要在继电器线圈上并联一个二极管呢&#xff1f;我们可以看看没有并联二极管时电路会出现什么情况&#xff0c;我们使用下图所示的电路参数仿真一下&#…

食家巷助力“甘肃乡村振兴,百强主播·打call 甘味”活动

2024年&#xff0c;甘肃省“商务乡村振兴”促消费暨“百强主播打call 甘味”活动在天水市龙城广场盛大启动。 活动现场&#xff0c;来自甘肃省 14 个市州的农特产品展台琳琅满目&#xff0c;让人目不暇接。此次活动中&#xff0c;各企业带来了多款深受消费者喜爱的产品&a…

【AI实践】Dify调用本地和在线模型服务

背景 Ollama可以本地部署模型&#xff0c;如何集成私有数据、如何外部应用程序对接&#xff0c;因此需要有一个应用开发框架 Dify功能介绍 欢迎使用 Dify | 中文 | Dify 下文将把dify部署在PC上&#xff0c;windows环境&#xff1b; 安装部署 安装dify及docker jacobJacobs…

【图解IO与Netty系列】Netty源码解析——服务端启动

Netty源码解析——服务端启动 Netty案例复习Netty原理复习Netty服务端启动源码解析bind(int)initAndRegister()channelFactory.newChannel()init(channel)config().group().register(channel)startThread()run()register0(ChannelPromise promise)doBind0(...) 今天我们一起来学…

ssm162基于SSM的药房药品采购集中管理系统的设计与实现+vue

药房药品采购集中管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对药房药品采购信息管理混乱&…

购物车店铺列表查询流程

购物车店铺列表查询流程 购物车结算流程图

【Git】基础操作

初识Git 版本控制的方式&#xff1a; 集中式版本控制工具&#xff1a;版本库是集中存放在中央服务器的&#xff0c;team里每个人work时从中央服务器下载代码&#xff0c;是必须联网才能工作&#xff0c;局域网或者互联网。个人修改之后要提交到中央版本库 例如&#xff1a;SVM和…

如何选择合适的大模型框架:LangChain、LlamaIndex、Haystack 还是 Hugging Face

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

小北Chat GPT4o 文生图初体验~

前言 在人工智能领域中&#xff0c;生成图像和文本的技术一直在不断进步。OpenAI的Chat GPT-4结合DALL-E技术&#xff0c;为用户提供了一种全新的创作体验——通过文字生成图像。在这篇博客中&#xff0c;小北将分享几次与Chat GPT-4合作的创作过程&#xff0c;展示从文字描述到…

redis aof写入以及aof重写的源码分析

这里写目录标题 版本aof的面试问题aof正常写入流程aof重写流程 版本 redis&#xff1a;6.2.7 aof的面试问题 最近找工作&#xff0c;面试被问倒了&#xff0c;记录一下 比如redis的aof指令会不会丢失&#xff1f;比如在重写aof的什么新来的操作怎么办&#xff1f; 在重写的…

无限可能LangChain——概念指南之架构

本节包含对 LangChain 关键部分的介绍。 架构 LangChain 作为一个框架由多个包组成。 langchain-core 该包包含不同组件的基本抽象以及将它们组合在一起的方法。此处定义了LLM、向量存储、检索器等核心组件的接口。这里没有定义第三方集成。依赖项有目的地保持非常轻量级。…