数据同步
➡️ 配置 iTop 与外部数据源的同步
数据同步功能允许将 iTop 对象与外部数据源对齐。管理员可在"配置 / 同步数据源"菜单中配置。
如果不熟悉此功能,请先阅读数据同步概述。
数据源定义
数据源通过菜单 管理工具 / 同步数据源 进行定义。
每个数据源定义:
- 要同步的对象的目标类
- 要同步的对象的属性/字段列表
- 如何搜索/协调对象与 iTop 中已存在的对象
- 在 iTop 中同步/更新以及可能删除对象的规则
- 同步对象对 iTop 最终用户的行为(哪些字段是只读的,是否允许用户删除对象等)
- 一个可选的超链接和图标,用于将 iTop 用户引导到外部应用程序中的相应对象
描述
属性部分的这一部分定义了此同步数据源的一些通用参数。
| 属性 | 必填? | 含义 | 示例值 |
|---|---|---|---|
| 名称 | 必填 | 引用此数据源的名称 | 来自 SCCS 的服务器同步 |
| 描述 | 可选 | 附加描述,仅供参考 | |
| 状态 | 必填 | implementation、production 或 obsolete:用于过滤/分类数据源 | production |
| 目标类 | 必填 | 要同步的对象类 | Server |
| 用户 | 必填 | 允许执行此同步的用户 | admin |
| 通知联系人 | 可选 | 当同步执行完成且包含至少一个错误时,通过电子邮件通知的联系人 | |
| 图标超链接 | 可选 | 指向代表此数据源的图像的超链接(URL)。此图标显示在 iTop 中同步对象标题旁"锁"符号的默认图标工具提示中 | |
| 应用程序超链接 | 可选 | 指向同步数据来自的远程应用程序的超链接(URL)。超链接可以包含占位符,如 $this->attcode$(将被当前对象的属性值替换)或 $replica->column_name$(将被副本中命名列的值替换) | https://myapp.acme.com/display/server/$replica->primary_key$ |
| 数据表 | 可选 | 存储副本信息的 MySQL 表名。如果省略,系统将为您生成一个唯一名称 | synchro_data_servers_from_sccs |
搜索与协调
属性的这一部分定义了:
- 副本表中的信息如何与 iTop 数据库的内容匹配
- 此同步数据源关于创建新 iTop 对象的行为
| 属性 | 含义 |
|---|---|
| 协调策略 | 使用属性(use_attributes):创建新副本时,系统将根据设置了"协调"标志为"是"的同步属性列表在 iTop 中搜索匹配对象。使用主键(use_primary_key):副本的 primary_key 列预期包含 iTop 中对象的标识符。 |
| 零个匹配时的操作 | 协调在 iTop 中未找到任何对象时的操作。创建(Create)指示系统创建目标类的新对象。错误(Error)将导致系统将此情况报告为错误(即此同步数据源应仅更新现有对象)。 |
| 一个匹配时的操作 | 协调在 iTop 中找到一个匹配对象时的操作。更新(Update)指示系统更新此对象。错误(Error)将导致系统将此情况报告为错误(即此同步数据源应创建对象且从不更新现有对象)。 |
| 多个匹配时的操作 | 协调在 iTop 中找到多个匹配对象时的操作。创建(Create)指示系统创建另一个对象。错误(Error)将导致系统将此情况报告为错误。取第一个(Take the first one)指示系统选择列表中的第一个对象并更新它。 |
删除规则
此部分定义同步对象的删除处理方式:
- 由 iTop 中的最终用户删除
- 由同步系统本身删除
| 属性 | 含义 |
|---|---|
| 允许删除的用户 | 哪些最终用户可以在 iTop 中删除同步对象。无人(Nobody):对象同步后,无人可以在 iTop 中删除它,只有同步系统可以删除它。仅管理员(Administrators only):只有管理员可以删除同步对象。允许删除此类对象的所有人(Everybody allowed to delete such objects):正常的访问规则适用于此类同步对象。 |
| 全量加载间隔 | 两次被认为是已加载(触及)所有副本的同步执行之间的持续时间。当副本在超过此值的时间内未被触及时,它被视为过时。 |
| 删除策略 | 副本变为过时时执行的操作。忽略(Ignore):不执行任何操作,关联对象保持原样。删除(Delete):在 iTop 中删除关联对象(以及数据表中的副本)。更新(Update):按照下面的更新规则更新关联对象。更新后删除(Update then Delete):按照下面的更新规则更新关联对象,然后在保留持续时间后删除对象(及副本)。 |
| 更新规则 | 以分号分隔的值列表,格式为 attribute_code:value,用于指定关联对象的哪个属性设置为哪个值。示例:status:obsolete;description:no longer synchronized |
| 保留持续时间 | 仅在删除策略设置为"更新后删除"时使用。在这种情况下,从源中删除的对象会立即更新,并且仅在保留持续时间后才从 iTop 中删除。 |
如果设置全量加载间隔为 7 天,保留持续时间为 14 天,则不再由源提供的对象将在 3 周后被删除。
属性
“属性"选项卡定义:
- 如何确定是否必须在 iTop 中创建新对象,或者是否必须将现有对象与副本关联(如果协调规则为属性中的"使用属性”)
- 关联对象的哪些属性必须更新,以及如何更新
| 属性选项卡 | 用途 |
|---|---|
| 属性 | 自动列出数据同步"目标类"的每个属性,及其标签和代码 |
| 协调 | 指定此列中的值是否应用于检索现有的 iTop 对象。仅用于新副本 |
| 更新 | 指定该 iTop 对象属性是否应由数据同步更新 |
| 更新策略 | 指定该属性是否可以在 iTop 中编辑 |
| 协调键 | 仅适用于外部键属性。指定用于检索远程对象的一个属性。可以是 id 或作为远程类唯一标识符的字段 |
协调列
当新记录出现在 synchro_data_xxx 表中时,同步机制将尝试将此记录与现有的 iTop 对象关联。如果一个或多个属性在"协调?“列中标记为"是”,这些列/属性将用于搜索匹配所有这些值的 iTop 对象。如果找到一个对象,它将成为与此记录关联的对象。如果未找到对象,将创建一个新的 iTop 对象。
更新列
更新列定义属性是否必须更新。
- 选中 = 是:属性将被设置/更新
- 未选中 = 否:此属性的外部源信息将被忽略,iTop 对象上的现有值将保持不变
- Null ⇒ 保留现有的 iTop 字段值
- 空字符串 ⇒ 重置 iTop 对象字段
您必须使用自己的填充机制将 Null 值加载到 synchro_data_xxx 表中,因为 synchro_import.php 无法做到这一点。
更新策略列
更新策略列定义了在编辑 iTop 对象时更新属性的行为。可能的值包括:
- 锁定(Locked):属性将完全由数据同步驱动,在 iTop 用户界面中显示为只读(旁边有一个小锁图标)
- 解锁(Unlocked):属性将由同步更新(每当源数据更改时),但最终用户仍可以在 iTop 中并行修改该属性
- 为空时初始化(Initialize if empty):同步仅在该属性在 iTop 中的值为空时才设置值。该属性在 iTop 中保持可修改
协调键列
最后,协调键列定义如何处理引用另一个 iTop 对象的属性(即外键)。提供的数据可以包含外键的实际值(id)或另一个属性(如对象的名称),该属性必须唯一标识该对象。
状态
状态选项卡显示有关同步执行的信息。如果同步从未运行,选项卡显示以下消息:
This synchro was never run. No log yet.
否则,选项卡显示类似于下图的架构:
同步历史
在屏幕左侧,每次同步执行都显示在历史列表中,显示总体状态、执行的开始日期和时间。
单击此列表中的元素以在右侧两列中显示相应的状态详情。
左侧列显示 synchro_data_xxxx 表中记录的状态:
- 新记录(New):自上次执行同步以来添加到表中的记录
- 现有记录(Existing):之前已存在且自上次执行同步以来已再次加载的记录
- 消失记录(Disappeared):在超过
full_load_interval持续时间内未被加载的记录 - 忽略记录(Ignored):对应于 iTop 中不再存在的对象
右侧列显示同步的后果,即对 iTop 中关联对象的修改。
- 对于每个新记录,后果可以是:在 iTop 中创建新对象(已创建)、更新 iTop 中已存在的对象(已更新)、与 iTop 中已是最新的对象简单关联(未更改),或尝试在 iTop 中创建或更新对象时出错(错误)
- 对于每个现有记录,后果可以是:更新关联对象(已更新)、完全无变化(未更改),或尝试更新关联对象时出错(错误)
- 对于每个消失记录,后果(取决于"删除规则")可以是:在 iTop 中删除关联对象(已删除)、在 iTop 中更新关联对象(已更新)、在 iTop 中保持关联对象不变(无操作),或尝试在 iTop 中更新或删除关联对象时出错(错误)
副本
在 iTop 中,副本用于存储状态信息以及 synchro_data_xxx 表中加载的原始数据与关联 iTop 对象之间的关系。
可以通过单击状态选项卡顶部的链接来显示给定数据同步源的副本。副本显示如下:
副本的内容有助于理解数据同步机制的行为(并获取有关错误的更多信息),但其数据由同步维护,不应手动修改。
| 副本字段 | 用途 |
|---|---|
| 同步数据源 | 此副本所属的同步数据源 |
| 目标对象(ID) | 对应于该副本的 iTop 对象 id。当副本是新的且由于错误无法同步时,可以为空 |
| 目标类型 | 同步数据源的目标类,也是目标对象的类 |
| 状态 | 副本的状态:已修改、新建、过时、孤儿、已同步 |
| 最后出现 | 该副本在源数据中最后一次出现的时间(相同的 primary_key) |
| 对象已创建? | 数据同步是否创建了 iTop 对象? |
| 最后错误 | 错误 |
| 警告 | 发生某些非阻塞错误时的警告消息 |
| 创建日期 | 同步数据源创建 iTop 对象的时间 |
| 最后修改日期 | 该副本最后一次被源修改的时间 |
| 副本状态 | 含义 |
|---|---|
| 新建(New) | 新接收的副本。在 syncho_exec.php 发生以创建 iTop 对象之前的临时状态 |
| 已修改(Modified) | 修改的副本。在 syncho_exec.php 发生以更新 iTop 对象之前的临时状态 |
| 已同步(Synchronized) | 副本和 iTop 对象已对齐 |
| 过时(Obsolete) | 数据中不再在源中,iTop 对象未被删除,否则副本也会被删除 |
| 孤儿(Orphan) | 这不应该发生。在这种情况下,同步的 iTop 对象已消失,同时未删除副本。此类副本可以安全地手动删除 |
使用 MySQL 语句填充 synchro_data_xxxx 表
如果您使用 SQL 命令(使用 ETL 或自制脚本)填充 synchro_data_xxx 表,您必须注意永远不要创建重复记录。请记住,synchro_data_xxx 表中的每条记录恰好对应 iTop 中的一个对象。
为了避免此类重复,您必须首先在插入新记录到表中之前查询现有记录。为了加速此查询,您可以构造一个唯一标识"源"对象的值并将此值存储在表的 “primary_key” 列中(该列具有唯一索引),或者使用记录列的任何组合并更改 synchro_data_xxxx 表的定义以添加您自己的索引。
然后触发 iTop 对象与临时表副本之间的数据同步执行,通过执行页面 synchro/synchro_exec.php,可以在命令行模式下执行,或通过调用网页(例如使用 wget)来执行。
使用 synchro_import 填充 synchro_data_xxxx 表
如何指定相关对象列表(链接集)
某些类具有称为链接集的属性。示例:UserLocal.profile_list
您可以通过在相应列中写入所有信息来同步这些列表:
以下是指定登录将具有一个配置文件:‘Portal User’ 的示例
INSERT login, profile_list INTO data_synchro_userlocal_1 VALUES ('johndoe', 'profileid->name:Portal User;reason:Customer')...;
您还可以指定多个链接(多个配置文件)。
有关更多信息,请参阅导入链接集。
故障排除
请参阅数据同步故障排除
原文:https://www.itophub.io/wiki/page?id=3_2_0:advancedtopics:data_synchronization
版本:3_2_0/advancedtopics/data_synchronization.txt · Last modified: 2024/10/28 12:21 by 127.0.0.1