【作者】许远,广东乐维软件有限公司
在企业IT运维管理中,Zabbix 作为一款强大的开源监控平台被广泛应用。而 Zabbix 模板作为监控配置的重要组成部分,用来定义监控项、触发器、图形等。随着国际化的需求增加,Zabbix 模板的翻译工作变得日益重要,特别是在需要为不同语言环境下的运维团队提供支持时,手动翻译模板不仅繁琐,而且容易出错。
1. 背景
传统的Zabbix 模板翻译通常依赖人工操作,尤其是当模板数量庞大或需要频繁更新时,人工翻译耗时且难以保持一致性。为了解决这一问题,我们可以结合 Local LLM 模型和 Zabbix API,自动化处理模板的获取、解析和翻译。这一解决方案不仅节省了时间,还能够根据自定义需求进行灵活调整。
Zabbix API
Zabbix 提供了丰富的 API 接口,允许用户通过 JSON-RPC 协议访问 Zabbix 服务器,完成与前端操作类似的功能,例如:获取、创建、更新模板。
Local LLM
2. 实现思路
我们将通过以下几个步骤实现Zabbix 模板翻译自动化:
1)使用Zabbix API 获取模板信息:通过Zabbix API 接口,获取需要翻译的 Zabbix 模板中的监控项、触发器等信息。
2)将模板数据传递给Local LLM :利用Local LLM 对获取到的文本内容进行翻译,确保翻译过程符合业务需求。
3. 详细实现步骤
3.1 获取 Zabbix 模板
我们首先通过Zabbix API 获取需要翻译的模板信息。假设 Zabbix 服务器的 API URL 为 http://192.168.3.35/z/api_jsonrpc.php,用户名为 a dmin,密码为 password 。
下面是一个通过Python 调用 Zabbix API 获取模板的代码示例:
连接到 Zabbix API
zabbix_url = “http://192.168.3.35/z/api_jsonrpc.php“
username = “ a dmin”
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
准备翻译请求
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 服务器:
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 技术,企业可以更高效地应对全球化的运维需求。
欢迎点击文末阅读原文到社区原文下评论或提问 觉得本文有用,请转发、点赞或点击在看,让更多同行看到
资料/文章推荐:
欢迎关注社区 "监控"技术主题 ,将会不断更新优质资料、文章。地址:
http://www.talkwithtrend.com/Topic/3937