Zabbix 模板翻译自动化

news/2024/11/27 9:56:39/文章来源:https://www.cnblogs.com/lwops/p/18571652

在企业 IT 运维管理中,Zabbix 作为一款强大的开源监控平台被广泛应用。而 Zabbix 模板作为监控配置的重要组成部分,用来定义监控项、触发器、图形等。随着国际化的需求增加,Zabbix 模板的翻译工作变得日益重要,特别是在需要为不同语言环境下的运维团队提供支持时,手动翻译模板不仅繁琐,而且容易出错。

结合 Local LLM(本地大语言模型)与 Zabbix API,可以实现 Zabbix 模板的自动化翻译,提高效率的同时也保证了翻译的一致性。本文将介绍如何利用 Local LLM 与 Zabbix API,实现 Zabbix 模板翻译自动化的整体流程和技术细节。

 


 

1. 背景

传统的 Zabbix 模板翻译通常依赖人工操作,尤其是当模板数量庞大或需要频繁更新时,人工翻译耗时且难以保持一致性。为了解决这一问题,我们可以结合 Local LLM 模型和 Zabbix API,自动化处理模板的获取、解析和翻译。这一解决方案不仅节省了时间,还能够根据自定义需求进行灵活调整。

Zabbix API

Zabbix 提供了丰富的 API 接口,允许用户通过 JSON-RPC 协议访问 Zabbix 服务器,完成与前端操作类似的功能,例如:获取、创建、更新模板。

Local LLM

Local LLM 是基于本地计算资源运行的大型语言模型,能够提供自然语言理解和生成能力。在翻译应用中,Local LLM 可以对输入的文本进行智能翻译,同时支持用户定制的领域术语与特定的翻译风格,满足业务的个性化需求。

 


 

2. 实现思路

我们将通过以下几个步骤实现 Zabbix 模板翻译自动化:

1. 使用 Zabbix API 获取模板信息:通过 Zabbix API 接口,获取需要翻译的 Zabbix 模板中的监控项、触发器等信息。

2. 将模板数据传递给 Local LLM:利用 Local LLM 对获取到的文本内容进行翻译,确保翻译过程符合业务需求。

3. 更新 Zabbix 模板:将翻译后的内容重新通过 Zabbix API 上传到服务器,更新模板,实现自动化翻译流程。

 


 

3. 详细实现步骤

3.1 获取 Zabbix 模板

我们首先通过 Zabbix API 获取需要翻译的模板信息。假设 Zabbix 服务器的 API URL 为 http://192.168.3.35/z/api_jsonrpc.php,用户名为 admin,密码为 password。

下面是一个通过 Python 调用 Zabbix API 获取模板的代码示例:

# 连接到 Zabbix API

zabbix_url = "http://192.168.3.35/z/api_jsonrpc.php"

username = "admin"

password = "password"

 

zapi = ZabbixAPI(zabbix_url)

zapi.login(username, password)

 

# 获取所有模板

templates = zapi.template.get(output="extend")

 

此代码用于从 Zabbix 服务器获取模板信息。通过 template.get API,我们可以获取包括监控项、触发器等在内的模板详细数据。

3.2 调用 Local LLM 进行翻译

假设我们有一个本地部署的 LLM 服务,地址为 http://127.0.0.1:11434/,使用模型 mistral:7b-instruct。我们将通过 API 将模板中的文本传递给 LLM,获得翻译后的内容。

 

# LLM API的URL

llm_url = http://127.0.0.1:11434/api/generate

 

# 准备翻译请求

def translate_text(text, short_version=False):

    prompt = f"你是一个专业的计算机相关语言翻译者,帮助我翻译语言为中文,除了翻译结果,不需要其他内容和解释。请注意, 当你接收到内容为空时,回复内容为空。请将以下文本翻译成中文:\"{text}\""

    if short_version:

        prompt += " 重新翻译,去掉备注,不要输出翻译结果外的内容。"

 

    payload = {

        "model": "mistral:7b-instruct",

        "prompt": prompt,

        "max_tokens": 100,

        "stream": False

    }

 

    response = requests.post(llm_url, json=payload)

   

    try:

        result = response.json()

        if result.get('done'):

            return result.get('response', '').strip()

        else:

            return "翻译未完成"

    except requests.exceptions.JSONDecodeError as e:

        print(f"JSON 解析失败: {e}")

        return text

 

def check_and_translate(text, max_length=50):

    translated_text = translate_text(text)

    while len(translated_text) > max_length:

        print(f"翻译内容过长 ({len(translated_text)} 字符),重新生成简短版本...")

        translated_text = translate_text(text, short_version=True)

    return translated_text

 

此处的 translate_text 函数将传入的模板文本发送到本地 LLM 服务进行翻译,并返回翻译后的内容。

3.3 更新 Zabbix 模板

翻译完成后,我们将通过 Zabbix API 更新模板。如下代码展示了如何使用 template.update 接口将翻译后的模板信息更新到 Zabbix 服务器:

def update_template():

            translated_name = check_and_translate(template_name, max_length=50)

            translated_description = check_and_translate(template_description, max_length=3000)

            try:

                update_result = zapi.template.update(

                    templateid=template_id,

                    name=translated_name,

                    description=translated_description

                )

                print(f"模板的名称更新成功: {update_result}")

            except Exception as e:

                print(f"跳过模板的名称更新: {translated_name},原因: {str(e)}")

 

        def update_items():

            items = zapi.item.get(templateids=template_id, output=['itemid', 'name', 'description'])

            for item in items:

                item_name = item['name']

                item_description = item.get('description', 'No Description')

                translated_item_name = check_and_translate(item_name, max_length=50)

                translated_item_description = check_and_translate(item_description, max_length=3000)

                try:

                    update_item_result = zapi.item.update(

                        itemid=item['itemid'],

                        name=translated_item_name,

                        description=translated_item_description

                    )

                    print(f"监控项更新成功: {update_item_result}")

                except Exception as e:

                    print(f"跳过监控项更新: {translated_item_name},原因: {str(e)}")

 

        def update_triggers():

            triggers = zapi.trigger.get(templateids=template_id, output=['triggerid', 'description', 'comments'])

            for trigger in triggers:

                trigger_description = trigger['description']

                trigger_comments = trigger.get('comments', 'No Comments')

                translated_trigger_description = check_and_translate(trigger_description, max_length=255)

                translated_trigger_comments = translate_text(trigger_comments)

                try:

                    update_trigger_result = zapi.trigger.update(

                        triggerid=trigger['triggerid'],

                        description=translated_trigger_description,

                        comments=translated_trigger_comments

                    )

                    print(f"触发器更新成功: {update_trigger_result}")

                except Exception as e:

                    print(f"跳过触发器更新: {trigger_description},原因: {str(e)}")

 

        def update_discovery_rules():

            discovery_rules = zapi.discoveryrule.get(templateids=template_id, output=['itemid', 'name', 'description'])

            for rule in discovery_rules:

                rule_name = rule['name']

                rule_description = rule.get('description', 'No Description')

                translated_rule_name = check_and_translate(rule_name, max_length=50)

                translated_rule_description = check_and_translate(rule_description, max_length=3000)

                try:

                    update_rule_result = zapi.discoveryrule.update(

                        itemid=rule['itemid'],

                        name=translated_rule_name,

                        description=translated_rule_description

                    )

                    print(f"自动发现规则更新成功: {update_rule_result}")

                except Exception as e:

                    print(f"跳过自动发现规则更新: {translated_rule_name},原因: {str(e)}")

 

4. 实现效果

4.1 获取Zabbix模板信息

 

4.2 翻译Zabbix模板信息

 

 

4.3 翻译前后对比

 

 

 

 

 

 

5. 总结

通过结合 Zabbix API 与 Local LLM,我们实现了 Zabbix 模板的自动化翻译。这一解决方案通过自动获取模板、调用本地语言模型进行智能翻译,并最终更新 Zabbix 模板的全流程自动化,极大提升了翻译效率,减少了手动操作带来的错误风险。

这种方法不仅适用于 Zabbix 模板的翻译,还可以扩展至其他类似场景,例如配置文件的翻译、监控规则的国际化等。通过结合自动化和 AI 技术,企业可以更高效地应对全球化的运维需求。

 

6. 附录

完整脚本可以到乐维社区免费下载https://forum.lwops.cn/article/631

 

 

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

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

相关文章

大数据学习记录,Python基础(1)

修改pip源由于直接从python服务器下载各种插件速度较慢,我们可以通过修改下载地址的方法提高下载速度修改 pip 源找到系统盘下C:\Users\用户名\AppData\Roaming,APPData可能是隐藏文件,需要将隐藏关闭;查看在Roaming文件夹下有没有一个pip文件夹,如果没有创建一个;进入pi…

大模型--模型量化GPTQ--23

目录1. 参考2. OBD3. OBS4. 从 OBS 到 OBQ5. GPTQ Gradient PreTrained Quantity 1. 参考 GPTQ 量化技术演进:https://zhuanlan.zhihu.com/p/690834228?utm_id=0 OBS/OBD/GPTQ:https://www.cnblogs.com/wangbingbing/p/17547681.html GPTQ使用的方法改进自OBC(Frantar, 202…

ERP、SCM、SRM、WMS、MES、QMS、OMS全上,真的有必要吗?

声明:不存在任何踩一捧一的意思,来自于网络上大家讨论度比较高的一个话题,某些专门盯着我们挑刺的朋友可以出门右转了。 另外这篇内容也会尽量客观的去探讨这个问题,也欢迎大家补充指正哦!首先,开门见山给出我个人的看法:没有必要。 就拿我所了解的一些企业来说吧,上了…

sqoop搭建及基本操作

SQOOP安装及使用 目录SQOOP安装及使用SQOOP安装1、上传并解压2、修改配置文件3、修改环境变量4、添加MySQL连接驱动5、测试准备MySQL数据登录MySQL数据库创建student数据库切换数据库并导入数据另外一种导入数据的方式使用Navicat运行SQL文件导出MySQL数据库importMySQLToHDFS编…

创建vue

首先下载nodejs 在安装好的nodejs目录下创建两个文件夹,分别命名为node_cache和node_global 打开cmd,分别输入 npm config set prefix “你的安装目录\node_global” npm config set cache “你的安装目录\node_cache” 将npm的全局模块目录和缓存目录配置到我们刚才创建的那…

TEZ搭建

Hive集成TezTez介绍:https://www.infoq.cn/article/apache-tez-saha-murthy MR在hive2中已经被弃用了,推荐使用Tez或Spark作为执行引擎1、编译下载Tez源码并根据Hadoop版本进行 由于Tez官方所提供的安装包对某些Hadoop版本不支持,可采取手动编译方式 需准备好maven环境,手动…

半导体行业数据保护:内外网数据摆渡的前沿技术!

在半导体行业中,核心数据的保护至关重要,像设计图纸、源代码、工艺参数、生产数据、测试数据、研发数据等,这些数据不仅是企业的核心资产,还直接关系到产品的竞争力和市场占有率。基于网络和数据安全管理需求,半导体企业一般会将内部网络通过防火墙隔离为内网和外网两个网…

什么是Data URI?

Data URI,全称为 Data Uniform Resource Identifier,是一种将小型数据文件直接嵌入到HTML、CSS或JavaScript等Web资源中的方案。它允许将数据编码为Base64字符串并包含在URI中,而不是引用外部文件。 基本语法: data:[<mediatype>][;base64],<data>data: 前缀,…

怎么去掉点击a链接或者图片出现的边框?

要去掉点击 a 链接或者图片出现的边框,你可以使用 CSS 的 outline 属性将其设置为 none。 以下几种方法可以实现: 1. 通用方法 (推荐): a, img {outline: none; }这个方法最简单直接,会移除所有 a 标签和 img 标签的 outline。 2. 更精确的控制 - 针对特定链接或图片: 如…

windows上安装npm

npm是nodejs下的包管理器,要使用npm命令就要下载nodejs 首先进入nodejs官网进行下载Node.js — Run JavaScript Everywhere (nodejs.org) 下载好后next,安装到想要的路径下一直next就行 这一步选择APP to PATH,默认添加配置 打开cmd 输入echo %path%,查看所有配置 看到node…

Prometheus告警带图完美解决方案

转载自:https://mp.weixin.qq.com/s/dDmZaJ66tdEScCJyansyJA 需求背景 告警分析处理流程 通常我们收到 Prometheus 告警事件通知后,往往都需要登录 Alertmanager 页面查看当前激活的告警,如果需要分析告警历史数据信息,还需要登录 Prometheus 页面的在 Alerts 中查询告警 p…

360评估如何自动剔除掉最高分和最低分?

在 360 度评估中,为了确保数据的真实性和有效性,我们可以采取一些控制评分结果的严谨措施。比如前几期中提到的 评价时的得分分布控制、提交评价后HR管理后台对极端评价结果一键打回功能等这些手段。 但有的时候我们就是希望不人为去干预太多,比如一键打回那种方式HR要付出不…