2023年12月

@

准备

  • 一台 macOS Monterey 以上的电脑
  • 安装 XCode13.3 以上
  • 安装 Visual Studio Code

安装扩展

打开Visual Studio Code,按下
Command + Shift + P
,输入
install
,选择
Extensions: Install Extensions
,搜索
MAUI
,安装
.NET MAUI
扩展。

安装 .NET

安装 .NET 8
https://dotnet.microsoft.com/zh-cn/download/dotnet

安装工作负载

打开终端,输入以下命令:

dotnet workload install maui

安装 Xcode 命令行工具

打开终端,输入以下命令:

sudo xcode-select --install

至此,应该可以调试iOS应用了。

调试安卓应用

若要在 Visual Studio Code 中调试 Android 应用,请执行以下操作:

安装 JDK

下载最新版本的 JDK:

https://learn.microsoft.com/zh-cn/java/openjdk/download

在这里插入图片描述

安装 JDK:

在这里插入图片描述

安装 Android SDK

创建新的 .NET MAUI 项目,在合适的位置打开终端,输入以下命令:

dotnet new maui

在项目文件夹中,打开终端,输入以下命令:

dotnet build -t:InstallAndroidDependencies -f:net8.0-android -p:AndroidSdkDirectory="<ANDROID SDK DIRECTORY>" -p:AcceptAndroidSDKLicenses=True

在 macOS 上,建议的 Android SDK 目录值为 $HOME/Library/Android/sdk

Android SDK 将自动被创建

安装 Android 模拟器

此时已可以真机调试 Android 应用,如果真机调试不方便,我们需要安装 Android 模拟器。

安装模拟器

前往 Android SDK Manager 所在目录,默认为 $HOME/Library/Android/sdk/cmdline-tools/11.0/bin,打开终端,输入以下命令:

./sdkmanager --install emulator

安装镜像

./sdkmanager "emulator" "system-images;android-34;google_apis;x86_64"

创建虚拟机

./avdmanager create avd -n Pixel5-API34 -k "system-images;android-34;google_apis;x86_64"

另外可以通过切换调试目标中的菜单,查看可用的镜像,选择一个镜像,或创建一个新的镜像。

CMD+SHIFT+P 或 查看->命令面板

在这里插入图片描述
选择“创建Android Emulator”
在这里插入图片描述
根据提示完成创建
在这里插入图片描述

同意许可条款

打开终端,输入以下命令:

./sdkmanager --licenses --verbose

按照提示输入
y
同意许可条款。

在这里插入图片描述

创建 MAUI 项目

若要创建新的 .NET MAUI 应用,请执行以下操作:

  1. 在资源管理器中,单击“创建 .NET 项目”或按 CMD+SHIFT+P> 选择“.NET: New Project...”。
  2. 选择“.NET MAUI 应用”或“.NET MAUI Blazor 应用”。
  3. 选择空文件夹。 如果文件资源管理器弹出窗口再次打开,则文件夹不为空。
  4. 为项目命名。
  5. 确保项目在解决方案资源管理器中成功加载,然后打开 C# 或 XAML 文件。
  6. 也可以通过单击“文件”>“打开...”在 Visual Studio Code 中打开现有的 .NET MAUI 项目。

调试 MAUI 应用

在 Visual Studio Code 中,按 F5 键或单击“运行”>“启动调试”以调试 .NET MAUI 应用。

调试器选择器将显示可用的调试器。 选择“ .NET MAUI”以启动调试会话。

在这里插入图片描述

切换调试目标

在 Visual Studio Code 的资源管理器中,打开项目sln文件,

在这里插入图片描述

此时在任务栏出现大括号
{}
,点击选择调试目标。

在这里插入图片描述

参考资料

扩展主页:
https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.dotnet-maui

扩展仓库:
https://github.com/microsoft/vscode-dotnettools

官方文档:
https://learn.microsoft.com/zh-cn/dotnet/maui/get-started/installation?view=net-maui-8.0&tabs=visual-studio-code

1.概述

人工智能(AI)的能力持续在全球范围内引起轰动,并对我们日常生活和职业生涯带来重大变革。随着像ChatGPT这样的先进生成型AI模型以及从GPT-3到GPT-4的加速,我们在高级推理、理解更长上下文和输入设置方面看到了重大改进。像ChatGPT这样的工具要求用户编写Prompt,以获得所需的输出。然而,一种更先进且更强大的AI工具已经进入游戏,只需用户解释需要的目标,之后工具会为您完成一切。本篇博客笔者将给大家介绍AutoGPT的一些使用实战心得。

2.内容

开发人员现在正在研究自主AI代理,这是对人工通用智能(AGI)的初步展望,这是一种能够通过其自身的过程、智力和推理执行人类水平智力任务的AI类型。

2.1 什么是AutoGPT

Auto-GPT的强大文本生成能力使其在用户中迅速赢得口碑。相比于之前的版本,GPT-4在高级推理、对更长上下文的理解以及输入设置方面都实现了显著的改进。这使得Auto-GPT成为撰写文章、创作故事,甚至解决复杂问题的理想选择。
更令人印象深刻的是,Auto-GPT相较于传统的ChatGPT等工具更为智能化。不再需要繁琐的提示草稿,只需简单解释您的目标,Auto-GPT即可为您完成所有繁重的工作。这标志着人工智能领域向着实现人工通用智能(AGI)迈出了更为重要的一步。

2.2 AutoGPT如何工作

Auto-GPT基于自主AI机制工作,将任务分解为多个子任务,并创建不同的AI代理来满足和完成这些任务。

这些人工智能代理包括:

  • 任务创建代理
    :当您向 Auto-GPT 提供目标时,第一个与您交互以启动处理任务的过程的代理是任务创建代理。该代理根据您的最终目标创建任务列表以及实现这些目标的步骤,并将其发送给优先级代理。
  • 任务优先级代理
    :一旦优先级代理收到任务列表,它会确保其正确的顺序具有逻辑意义并将其发送到执行代理。
  • 任务执行代理
    :一旦设置了子任务优先级,执行代理就开始一一完成这些任务,利用互联网、GPT-4 和完成任务所需的其他工具。

如果任务未完成,这三个代理还会相互通信。

例如,一旦执行代理完成了步骤,但结果不符合预期,它就会与任务创建代理进行通信,任务创建代理可以创建一个新的任务列表来满足最终目标。此过程在所有三个代理之间创建交互循环,直到它们可以生成用户定义的输出。

当这些人工智能代理执行任务时,他们的操作会显示在用户界面上,分为四个类别,即:

  • 想法:人工智能代理在完成每项任务后分享他们的想法。
  • 推理:人工智能代理解释其行为背后的推理,回答执行每个步骤背后的原因。
  • 计划:系统然后提供完成给定任务的战略计划。
  • 批评:然后系统会提供批评,允许人工智能代理克服错误并纠正错误(如果有)。

因此,这种计算流程使 Auto-GPT 能够深入了解解决特定问题的步骤并纠正错误,而无需人工干预。

2.3 安装AutoGPT的依赖环境

以下是在计算机上安装Auto-GPT的关键要求:

➡️ 适用计算机:
您不需要一台先进或功能强大的计算机,但一台具备基本性能的计算机即可安装Auto-GPT,因为大多数繁重的工作由云上的OpenAI API执行。

➡️ Python版本:
安装Auto-GPT需要Python 3.8或更高版本。

➡️ GPT-4 API访问:
为了获得更出色的性能、推理能力,并降低生成虚假信息的风险,您需要访问GPT-4 API。

➡️ Git:
安装过程中需要Git,确保已安装并配置。

➡️ Visual Studio Code:
推荐使用Visual Studio Code作为集成开发环境,以便更便捷地进行代码编辑和管理。

➡️ OpenAI API密钥:
为了使用Auto-GPT,您需要获得OpenAI API密钥。确保您的密钥有效并按照安装过程中的指导进行正确配置。

这些要求将确保您能够顺利安装和使用Auto-GPT,充分发挥其强大的文本生成能力。

2.4 如何安装AutoGPT

与ChatGPT等只需简单登录即可访问和使用的工具不同,使用Auto-GPT需要进行本地设备上的多个软件安装,以满足其运行的要求。

因此,如果您希望充分利用Auto-GPT的功能,请按照以下步骤在本地设备上安装该工具。

2.4.1 安装必备软件

Auto-GPT的安装涉及到三个主要软件:Python、Git和Visual Studio Code。

2.4.2 下载AutoGPT源代码

前往最新的
GitHub Auto-GPT 发布页面
,向下滚动并单击“源代码 (zip)”链接以下载 zip 文件。

现在解压缩此 zip 文件并复制 Auto-GPT 文件夹,将其粘贴到您所需的位置或硬盘驱动器上。 同时,您可以从 GitHub Auto-GPT 发布页面复制项目的链接。为此,请单击窗口左侧的“代码” ,然后再次单击绿色的“代码”按钮。然后,复制屏幕上提示的 HTTPS URL。

2.4.3 安装Python

打开 Visual Code Studio 并在 VCS 编辑器中打开 Auto-GPT 文件。单击“打开文件夹”链接并在编辑器中打开 Auto-GPT 文件夹。

为了尽可能轻松地使用存储库提供的所有工具,存储库的根目录中包含一个 CLI:

$ ./run
Usage: cli.py [OPTIONS] COMMAND [ARGS]...

Options:
--help Show this message andexit.

Commands:
agent Commands to create, start
andstop agents
arena Commands to enter the arena
benchmark Commands to start the benchmark
and list tests andcategories
setup Installs dependencies needed
for your system.

只需克隆存储库,使用 安装依赖项./run setup,就可以开始了!

2.4.4 重命名配置文件

当您在 VCS 编辑器中向上滚动文件列表时,您将看到 .env.template 文件。右键单击该文件,然后单击“重命名”选项。通过删除“.template”来重命名该文件。

最后,配置好OPENAI_API_KEY就可以启动AutoGPT了。

3.AutoGPT与ChatGPT

尽管ChatGPT和Auto-GPT都是由OpenAI训练的大型语言模型(LLM),但它们在服务不同目的的同时也存在一些区别。这两种工具分别在不同的数据集上训练,并针对执行不同任务进行了优化。

以下是Auto-GPT与ChatGPT的几个区别:

1.训练数据

ChatGPT 主要基于从网络、社交媒体帖子、书籍、博客和文章检索的大量文本进行训练。因此,它在理解人类语言方面更有能力、更通用。

另一方面,Auto-GPT 是在来自 StackOverflow、GitHub 和类似代码存储库的大量代码集合上进行训练的。该训练数据集使 Auto-GPT 专门用于理解编程语言、结构和语法。

因此,由于 Auto-GPT 对特定代码的编写方式有更深入的了解,因此它可以生成准确且高效的代码,从而加快组织的代码开发过程并降低软件错误的风险。

2.实时洞察

ChatGPT 最新的 GPT-4 模型是在相同的 GPT-3.5 数据上训练的;然而,它只到2021年9月。因此,ChatGPT无法提供最新信息和实时见解,因为它不允许您访问在线平台或网站来提取信息。

相反,Auto-GPT提供访问互联网、联网搜索、验证数据源是否合法的功能。此外,Auto-GPT 可以访问任何网站或在线平台来执行给定任务。例如,根据您向 Auto-GPT 提供的目标,它可以进入星巴克网站并订购您的饮料,还可以根据指示起草电子邮件并将其发送给潜在客户。

3.文字转语音

Auto-GPT 允许您通过在命令行中键入命令python -m autogpt -speak来启用文本转语音。但是,每次您希望通过语音与 Auto-GPT 交互时,它都要求您输入此命令。

4.图像生成

与 ChatGPT 等 AI 模型不同,Auto-GPT 可以生成图像,因为该工具使用 DALL-E。您必须提供对 DALL-E 的 API 访问权限,才能为您的 AI 代理启用图像生成功能。

5.优化

OpenAI 优化了 ChatGPT,以实现生成类似人类的文本输出的连贯性和自然性,而 Auto-GPT 则针对代码生成的速度和准确性进行了优化,从而减少了时间以及软件中的错误和漏洞。

6.应用领域

您可以使用 Auto-GPT 执行代码优化、自动代码完成和代码摘要等任务。另一方面,ChatGPT 广泛用于完成文本生成、语言翻译和聊天机器人等任务。因此,ChatGPT 的应用程序专注于提高机器与人类之间的效率和通信,而 Auto-GPT 的应用程序专注于提高代码开发过程的准确性和效率。

4.自动 GPT 的优点

Auto-GPT 是一种以最少的人力输入生成高质量输出的工具,与传统人工智能聊天机器人相比,具有多种优势,包括:

  1. 无缝定制:您可以根据您的特定业务或行业需求轻松定制 Auto-GPT。开发人员可以轻松修改源代码以改进现有功能,或将新功能添加到相关的产品内容中,并根据目标受众和项目的需求进行定制。
  2. 自主性: Auto-GPT 的自主性是其最独特的功能之一,使其与其他传统人工智能机器人区分开来。由于它可以自行识别完成目标所需的提示以提供高质量的输出,因此 Auto-GPT 成为高度可靠且高效的人工智能工具。
  3. 速度: Auto-GPT 可以轻松分析大量数据并比人类更快地生成准确的结果。
  4. 灵活性: Auto-GPT可以学习新技能并执行广泛的任务;因此,它不仅仅局限于特定的任务或领域,使其成为一个高度通用的工具。
  5. 一致性: Auto-GPT 可以在多个内容片段中保持风格、语气和语音的一致性。此功能使 Auto-GPT 成为企业和机构定期生成大量内容的出色工具。

5.总结

Auto-GPT是一种多功能的创新工具,极大地改变了我们与人工智能模型的互动方式。其引入了多样化的用例,使我们能够以更迅速的速度执行任务,并且具备更高的准确性和效率。

这一特性使得Auto-GPT在希望生成准确、迅速代码的人工智能爱好者和代码开发人员中成为理想的工具。其优越的文本生成能力不仅简化了创作过程,还提高了任务执行的效率,为用户提供了一种更智能、更便捷的体验。

6.结束语

这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

另外,博主出书了《Kafka并不难学》和《Hadoop大数据挖掘从入门到进阶实战》,喜欢的朋友或同学, 可以在公告栏那里点击购买链接购买博主的书进行学习,在此感谢大家的支持。关注下面公众号,根据提示,可免费获取书籍的教学视频。

为什么需要监控系统

分布式系统需要监控系统的原因有很多,以下是其中一些重要的原因:

  1. 确保系统可用性和稳定性
    :监控系统可以帮助您持续监测系统的性能和可用性。当分布式系统的某些部分出现故障或性能瓶颈时,监控系统可以立即发出警报,以便您能够快速采取行动解决问题,确保系统的稳定性和可用性。
  2. 识别和解决性能问题
    :通过监控系统的实时数据和历史数据,您可以了解系统的性能状况,包括系统的响应时间、吞吐量、资源利用率等。这些数据可以帮助您识别和解决性能问题,优化系统的性能。
  3. 实现故障隔离和恢复
    :分布式系统中的不同组件和节点可能会出现故障或异常。监控系统可以监测这些故障或异常,并将它们与正常状态进行隔离,以防止故障的扩散。此外,监控系统还可以提供自动恢复功能,确保分布式系统能够快速恢复到正常状态。
  4. 满足合规性和审计要求
    :许多企业和组织都有合规性和审计要求,需要记录系统的运行状态和数据。监控系统可以帮助您收集、存储和分析这些数据,以满足合规性和审计要求。
  5. 提高系统的可维护性和可扩展性
    :通过监控系统的数据和警报,您可以了解系统的维护需求和扩展需求。这些信息可以帮助您制定更好的维护和扩展计划,提高分布式系统的可维护性和可扩展性。

总之,监控系统是分布式系统中不可或缺的一部分。通过实时监测、警报、数据记录和分析等功能,监控系统可以帮助您确保系统的可用性、稳定性、性能、合规性和可维护性,为分布式系统的正常运行和管理提供强有力的支持。

监控分布式系统主要指标

分布式系统监控是确保系统稳定、高效运行的关键。以下是监控分布式系统的主要内容:

  1. 性能指标监控
    :包括CPU使用率、内存占用率、磁盘空间使用率等,这些数据可以帮助您了解系统的负载情况和资源利用率。
  2. 网络监控
    :包括网络延迟、丢包率、带宽使用情况等,这些数据可以帮助您了解网络状况和系统之间的通信质量。
  3. 应用程序监控
    :包括应用程序的响应时间、错误率、吞吐量等,这些数据可以帮助您了解应用程序的运行状况和性能表现。
  4. 日志监控
    :通过监控应用程序和系统的日志,可以发现潜在的问题和异常,及时进行排查和处理。
  5. 分布式追踪
    :通过分布式追踪技术,可以监控分布式系统中各个组件之间的调用关系和性能瓶颈,帮助您快速定位和解决问题。
  6. 安全性监控
    :包括监控系统安全漏洞、异常访问等,这些数据可以帮助您及时发现和预防潜在的安全风险。
  7. 容器化监控
    :对于使用容器技术的分布式系统,还需要监控容器的资源使用情况、容器间的通信等。

通过以上内容的监控,可以全面了解分布式系统的运行状况,及时发现和解决问题,保证系统的稳定性和高性能表现。

创建分布式监控系统的步骤

创建分布式监控系统的步骤包括以下:

  1. 需求分析:首先需要明确监控系统的需求,包括需要监控的资源、监控指标、报警阈值等。这有助于确定监控系统的规模和复杂度。
  2. 选择监控工具:根据需求,选择适合的监控工具。这些工具可以包括系统性能监控工具、网络监控工具、应用程序监控工具等。
  3. 部署监控代理:在需要监控的资源上部署监控代理,这些代理能够收集各种监控数据,并将其发送到监控服务器。
  4. 配置监控规则:根据需求,配置相应的监控规则。这些规则可以包括数据采集规则、报警规则等。
  5. 数据处理与分析:对收集到的监控数据进行处理和分析,以生成各种有用的信息。这些信息可以包括系统性能报告、故障分析报告等。
  6. 报警与通知:根据配置的报警规则,当监控数据超过预设阈值时,系统会发送报警通知。这些通知可以通过邮件、短信、电话等方式发送给相关人员。
  7. 优化与调整:根据实际运行情况和反馈,对监控系统进行优化和调整,以提高其准确性和稳定性。
  8. 定期维护:定期对监控系统进行维护,以确保其正常运行。这包括清理过期数据、更新监控代理等。

分布式监控系统的分类

根据组件和场景的不同,分布式监控系统可以分为以下几类:

  1. 基于组件的分类:
  • 主机监控系统:主要用于监控服务器、存储设备等IT基础设施的运行状态,包括CPU使用率、内存占用率、磁盘空间等。
  • 网络监控系统:用于监控网络设备的状态和网络流量,包括交换机、路由器、防火墙等设备的运行状态和网络带宽、延迟等指标。
  • 应用监控系统:用于监控应用程序的运行状态和性能,包括响应时间、吞吐量、错误率等指标,以及应用程序内部的线程、数据库连接等状态。
  • 安全监控系统:用于监控网络的安全状况,包括入侵检测、恶意软件防护等,通过收集和分析网络流量、日志等信息来发现安全威胁。
  1. 基于场景的分类:
  • 集中式监控系统:将所有的监控数据集中收集到一个中心管理平台上进行处理和分析,便于统一管理和调度。适用于大规模、集中式的IT基础设施。
  • 分布式监控系统:将监控数据分散到多个节点进行处理和分析,每个节点负责一部分监控任务,适用于分布式、小型化的IT基础设施。
  • 云监控系统:基于云计算技术实现的监控系统,将监控数据存储在云端,通过云服务提供商提供的接口进行访问和管理,适用于云计算环境下的IT基础设施。

常见的监控系统

监控系统是确保企业应用程序和基础设施稳定、安全运行的重要工具。随着技术的发展,监控系统的类型也变得多样化。以下是三种常见的监控系统分类:

  1. 日志类监控

日志类监控主要通过收集和分析应用程序和系统的日志文件来进行监控。这些日志文件包含了大量的信息和指标,例如访问日志、错误日志、安全日志等。通过对这些日志进行分析,可以及时发现潜在的问题、攻击和异常行为。例如,当某个IP地址的访问日志出现异常时,可能意味着该IP地址存在安全风险。

  1. 调用链监控

调用链监控主要通过跟踪应用程序在运行过程中各个组件之间的调用关系来进行监控。这种监控方式可以帮助开发人员更好地理解应用程序的性能瓶颈和问题所在。通过调用链监控,开发人员可以快速定位到出现问题的组件,并对其进行优化或修复。

  1. 度量类监控

度量类监控主要通过收集应用程序的各种性能指标来进行监控。这些指标包括CPU使用率、内存使用率、磁盘空间使用率、网络带宽等。通过对这些指标进行分析,可以及时发现应用程序的性能瓶颈和资源浪费问题。例如,当CPU使用率持续升高时,可能意味着应用程序存在性能问题,需要进行优化或升级硬件资源。

总结:以上三种监控系统分类各有优缺点,在实际应用中可以根据需要进行选择和组合。为了确保监控系统的效果,还需要注意以下几点:

  • 保证数据准确性和实时性:监控系统需要收集大量数据,因此要确保数据的准确性和实时性。可以采用一些数据清洗和过滤技术来提高数据的准确性。
  • 建立统一的标准和规范:不同的监控系统之间存在差异,因此需要建立统一的标准和规范,以便进行数据整合和比较。
  • 定期进行数据分析和挖掘:监控系统收集的数据具有很高的价值,可以进行数据分析和挖掘,以发现潜在的问题和改进点。
  • 及时响应和处理异常事件:一旦发现异常事件,需要及时响应和处理,以避免问题扩大化。可以采用一些自动化工具和脚本,以便快速处理异常事件。

分布式监控系统的分层

分布式监控系统是一个复杂且重要的系统,它能够实时监控分布式系统的状态和性能,以确保系统的稳定性和可靠性。分布式监控系统通常分为多个层次,每个层次都有其特定的监控目标和职责。以下是分布式监控系统的分层及其说明:

客户端监控
:客户端监控是对客户端设备的状态和性能进行实时监控的过程。这一层次的监控主要包括监控客户端设备的CPU利用率、内存使用情况、磁盘空间等硬件资源的使用情况,以及应用程序的运行状态和网络连接状态等。客户端监控的目标是确保客户端设备的正常运行,以及及时发现和解决潜在的问题。

业务层监控
:业务层监控是对分布式系统中的业务逻辑进行实时监控的过程。这一层次的监控主要包括监控业务逻辑的处理时间、成功率、失败率等关键指标,以及业务逻辑的依赖关系和容错处理等。业务层监控的目标是确保分布式系统中的业务逻辑能够正常、高效地运行,以及及时发现和解决业务逻辑中存在的问题。

应用层监控
:应用层监控是对分布式系统中的应用程序进行实时监控的过程。这一层次的监控主要包括监控应用程序的进程状态、线程状态、数据库连接等,以及应用程序的响应时间、吞吐量、错误率等关键指标。应用层监控的目标是确保应用程序的正常运行,以及及时发现和解决应用程序中存在的问题。

系统层监控
:系统层监控是对分布式系统中的操作系统、中间件等基础设施进行实时监控的过程。这一层次的监控主要包括监控系统资源的使用情况、系统性能指标、安全事件等,以及中间件的配置和运行状态等。系统层监控的目标是确保基础设施的正常运行,以及及时发现和解决基础设施中存在的问题。

网络层监控
:网络层监控是对分布式系统中的网络设备、网络流量等进行实时监控的过程。这一层次的监控主要包括监控网络设备的状态、网络延迟、丢包率等关键指标,以及网络流量的实时监测和分析等。网络层监控的目标是确保网络的正常、稳定运行,以及及时发现和解决网络中存在的问题。

通过以上五个层次的分布式监控,可以全面地了解分布式系统的状态和性能,以及及时发现和解决潜在的问题,从而确保分布式系统的稳定性和可靠性。

Zabbix实现监控系统

Zabbix是一个开源的IT基础设施监控软件,可以用于监控各种硬件、网络服务、网络设备、服务器、网络设备以及运行的服务。通过使用Zabbix,管理员可以监控和记录系统的性能指标,以便及时发现和解决潜在的问题。

以下是使用Zabbix实现监控系统的一些步骤:

  1. 安装Zabbix Server和Zabbix Agent:首先需要在需要监控的目标主机上安装Zabbix Agent,然后在Zabbix Server上安装Zabbix Server软件。
  2. 配置Zabbix Agent:在Zabbix Agent的配置文件中设置需要监控的目标主机和需要收集的数据。
  3. 创建监控项:在Zabbix Server上创建监控项,指定需要监控的目标主机、监控项类型和参数。
  4. 创建触发器:根据需要监控的数据,创建触发器,以便在数据超过预设阈值时触发警报。
  5. 创建动作:在Zabbix Server上创建动作,指定在触发器被触发时需要执行的操作,例如发送邮件或短信通知。
  6. 创建图形:在Zabbix Server上创建图形,以便可视化地展示监控数据。
  7. 运行Zabbix Server:启动Zabbix Server,并确保Zabbix Agent与Zabbix Server正常通信。
  8. 查看监控数据:通过Zabbix Web界面查看监控数据,并接收警报通知。

总之,使用Zabbix实现监控系统可以帮助管理员及时发现和解决潜在的问题,保证系统的稳定性和可靠性。

Prometheus实现监控系统

Prometheus是一个开源的监控系统,它可以帮助您收集、处理、存储和展示应用程序或基础设施的性能指标。通过Prometheus,您可以轻松地了解和诊断系统运行状况,从而提高系统的可用性和稳定性。

以下是Prometheus实现监控系统的一些关键步骤:

  1. 安装和配置Prometheus

首先,您需要在您的服务器上安装和配置Prometheus。您可以从Prometheus的官方网站上下载最新的版本,并按照官方文档进行安装和配置。在配置Prometheus时,您需要定义要监控的目标和服务。

  1. 安装和配置Exporters

Prometheus通过Exporters收集目标服务的性能数据。Exporters可以将目标服务的性能数据暴露给Prometheus,以便Prometheus可以收集这些数据。常见的Exporters包括Node Exporter、Redis Exporter、MySQL Exporter等。您需要选择适合您监控目标的Exporter,并按照官方文档进行安装和配置。

  1. 定义和配置警报规则

Prometheus提供了强大的警报功能,可以自定义警报规则和通知方式。您可以使用PromQL(Prometheus查询语言)定义警报规则,例如系统CPU使用率超过阈值、数据库连接数不足等。一旦满足警报规则的条件,Prometheus将发送警报通知给相关人员。

  1. 展示和查询性能数据

Prometheus提供了强大的可视化界面,可以展示和查询性能数据。您可以使用Prometheus自带的Web UI或者第三方工具(如Grafana)来展示和查询性能数据。通过这些工具,您可以轻松地查看系统运行状况、分析性能瓶颈、预测系统发展趋势等。

总之,Prometheus是一个强大的监控系统,可以帮助您全面了解和监控应用程序或基础设施的性能状况。通过Prometheus,您可以及时发现和解决潜在的性能问题,提高系统的可用性和稳定性。

总结/朱季谦

在日常开发或者编程当中,经常需要用到redis集群,若是按照传统的方式,一个机器一个机器搭建,难免过于繁琐,故而可以通过dock er-compose编排方式,快速搭建。我在搭建过程当中,将操作记录下来,方便以后需要搭建三主三从节点时,可以基于以前的成功经验,快速搭建起来。

一、环境准备

准备三台机器,在每台机器上,计划安装一个Redis主节点和一个Redis从节点。

机器 Redis节点 节点端口
192.168.31.130 redis-master/redis-slave 6379/6380
192.168.31.131 redis-master/redis-slave 6379/6380
192.168.31.132 redis-master/redis-slave 6379/6380

二、文件准备

2.1、创建Redis节点目录

分别在192.168.31.130、192.168.31.131、192.168.31.132机器上,执行以下命令,创建Redis主从节点文件目录——

for dir in redis-master/data redis-slave/data; do mkdir -p "/opt/docker/redis-cluster/$dir";done

2.2、创建节点配置文件redis.conf

分别在192.168.31.130、192.168.31.131、192.168.31.132机器上的/opt/docker/redis-cluster/redis-master/与/opt/docker/redis-cluster/redis-slave/目录下,创建一个redis.conf文件,文件内容包括以下属性——

port 6379 #指定 Redis 服务器监听的端口号,这是客户端与 Redis 服务器进行通信的端口。
save 900 1#在给定时间间隔内有多少次写操作时,Redis 将执行自动的快照(生成 RDB 文件)。
save 300 10
save 60 10000
dbfilename dump.rdb#指定生成的 RDB 文件的名称。
dir /data #指定持久化文件的存储目录。
appendonly yes #启用 AOF(Append-Only File)持久化模式。
appendfilename "appendonly.aof" #指定 AOF 文件的名称。
appendfsync everysec #控制 AOF 缓冲区的内容何时同步到硬盘。这里的选项 everysec 表示每秒同步一次
cluster-enabled yes #启用 Redis 集群功能。
cluster-config-file nodes.conf #指定保存集群拓扑信息的配置文件名。
cluster-node-timeout 5000 #设置节点间通信的超时时间,单位为毫秒。

快捷指令,直接在linux运行——

for dir in redis-master redis-slave; do 
 if [ "$dir" == "redis-master" ]; then
    port=6379
  elif [ "$dir" == "redis-slave" ]; then
    port=6380
  fi
echo "port $port 
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /data 
appendonly yes 
appendfilename "appendonly.aof" 
appendfsync everysec 
cluster-enabled yes 
cluster-config-file nodes.conf 
cluster-node-timeout 5000" > /opt/docker/redis-cluster/$dir/redis.conf;done

运行完成后,在/opt/docker/redis-cluster/redis-master/以及/opt/docker/redis-cluster/redis-slave/生成一个data目录和一个redis.conf文件——
image

redis.conf文件里内容就是前面设置的。

三、编写docker-compose.yml编排文件

分别在三台机器的/opt/docker/redis-cluster/目录下,创建docker-compose.yml文件,内容如下:

version: '3.1'
services:
  redis-master:
    image: redis:5.0.8
    container_name: redis-master
    restart: always
    network_mode: "host" 
    volumes:
    - /opt/docker/redis-cluster/redis-master/data:/data
    - /opt/docker/redis-cluster/redis-master/redis.conf:/usr/local/etc/redis/redis.conf
    command: ["redis-server","/usr/local/etc/redis/redis.conf"]
  redis-slave:
    image: redis:5.0.8
    container_name: redis-slave
    restart: always
    network_mode: "host" 
    volumes:
      - /opt/docker/redis-cluster/redis-slave/data:/data
      - /opt/docker/redis-cluster/redis-slave/redis.conf:/usr/local/etc/redis/redis.conf
    command: [ "redis-server","/usr/local/etc/redis/redis.conf" ]

完成后,执行指令docker-compose up -d——
image

执行指令docker ps -a查看一下容器是否已经正常运行,如下现实证明没有问题——
image

四、执行指令组建redis集群

4.1、任意一台机器上,执行以下指令,进入到docker容器当中——

docker exec -it redis-master bash #redis-master对应的是docker ps -a查看到的容器名redis-master

4.2、创建集群

redis-cli --cluster create  192.168.31.130:6379  192.168.31.130:6380  192.168.31.131:6379 192.168.31.131:6380 192.168.31.132:6379 192.168.31.132:6380 --cluster-replicas 1

执行完成后,打印日志如下——
image

执行指令后,会出现提示“Can I set the above configuration? (type 'yes' to accept):”,这里输入yes,回车。出现以下情况话,就是已经成功创建redis集群了——
image

可以通过以下指令进入到redis客户端,查看集群情况——

root@hadoop1:/data# redis-cli -c -h 192.168.31.130 -p 6379

然后,执行指令cluster info查看集群状况,显示cluster_state:ok则表示集群已经正常创建。
image

当然,可以进一步通过cluster nodes指令,查看各节点状况,已经是三主三从的集群状况了——
image

以上,就是整个集群搭建过程。

若是之前没有玩过Docker的朋友,可以参考我之前的一篇Docker搭建记录文章《
CentOS7安装Docker遇到的问题笔记

Kernel Memory 入门系列:Semantic Kernel 插件

Kernel Memory 本身提供了完整的RAG能力,这部分能力如果通过Semantic Kernel Memory的话,也是可以实现的,但是整体的管理成本会比较高。
因此通过Kernel Memory 构建知识库管理,然后通过插件的方式,将Kernel Memory接入到Semantic Kernel 中,这样就可以有效的提升整体的使用效率。

初始化插件

首先需要在Semantic Kernel 的项目中添加对应的Kernel Memory的Semantic Kernel Plugin包。

dotnet add package Microsoft.KernelMemory.SemanticKernelPlugin

然后就取出构建KernelMemory,构建的步骤和之前的方式一样,也可以使用Kernel Memory Service的 WebClient.

var memory = new KernelMemoryBuilder()
               //...
                 .Build<MemoryServerless>();
// OR

var memory = new MemoryWebClient("http://127.0.0.1:9001"); 

完成构建之后就可以Semantic Kernel 中导入插件了。

var memoryPlugin = kernel.ImportPluginFromObject(new MemoryPlugin(memory), "memory");

如果直接使用Kernel Memory Service的话,也可以通过快捷方式直接构建。

var memoryPlugin = kernel.ImportPluginFromObject(new MemoryPlugin("http://127.0.0.1:9001"), "memory");

如果有使用其中的ApiKey参数的话,也可以参考其中的参数说明进行配置。

另外还可以指定默认的 Index 和文档的 tags。

new MemoryPlugin(memory,
        defaultIndex: "default",
        defaultRetrievalTags: 
            new TagCollection()
            {
                {"user", "xbotter"}
            }
        );

插件的功能

MemoryPlugin 本身提供了近乎完整的Kernel Memory的功能,包括:

  • Save
  • SaveFile
  • SaveWebPage
  • Search
  • Ask
  • Delete
  • WaitForDocumentReadiness

也就意味着如果在Semantic Kernel 中,通过插件功能的编排,可以实现动态的知识库管理。

当然也可以通过 plugin 直接调用其中的方法例如:

    var context = new KernelArguments
    {
        [MemoryPlugin.FilePathParam] = DocFilename,
        [MemoryPlugin.DocumentIdParam] = "NASA001"
    };
    await memoryPlugin["SaveFile"].InvokeAsync(kernel, context);

插件的使用

导入到Semantic Kernel 中的插件可以通过在提示词函数中直接使用,最常见的就是在提示词中使用
Ask
方法和
Search
方法。

var skPrompt = """
                Question to Kernel Memory: {{$input}}

                Kernel Memory Answer: {{memory.ask $input}}

                If the answer is empty say 'I don't know' otherwise reply with a preview of the answer, truncated to 15 words.
               """;

var askFunction = kernel.CreateFunctionFromPrompt(skPrompt);

和直接使用 MemoryClient 一样,调用 memory.ask 方法可以直接获取 Kernel Memory的回答,构成提示词的一部分。

如果只是需要检索相关的文档的话,可以使用
Search
方法。

var skPrompt = """
                Facts:
                {{memory.search $input}}
                ======
                Given only the facts above, provide a comprehensive/detailed answer.
                You don't know where the knowledge comes from, just answer.
                If you don't have sufficient information, reply with 'I don't know'.
                Question: {{$input}}
                Answer: 
                """;
var searchFunction = kernel.CreateFunctionFromPrompt(skPrompt);

这里其实就相当于是使用 PromptFunction 替换了 KernelMemory中的Ask方法。

另外其中的一些参数都可以通过
KernelArguments
进行配置,例如:

var args = new KernelArguments
{
    [MemoryPlugin.IndexParam ] = "default",
    [MemoryPlugin.LimitParam] = "10",
    [MemoryPlugin.MinRelevanceParam] = "0"
};

最后就是Kernel Function 的调用了:

var question = "any question";
var answer = await askFunction.InvokeAsync(kernel, question);

 // or 

args["input"] = question;
var result = await kernel.InvokeAsync(searchFunction,args);

参考

2024,新年快乐