{"id":19961564,"url":"https://github.com/hxz393/configcentercomparer","last_synced_at":"2026-03-13T18:23:17.026Z","repository":{"id":207091875,"uuid":"715351774","full_name":"hxz393/ConfigCenterComparer","owner":"hxz393","description":"配置中心对比工具，支持 Apollo 和 Nacos (A GUI configuration center comparison tool, supporting Apollo and Nacos)","archived":false,"fork":false,"pushed_at":"2024-06-17T06:07:21.000Z","size":2345,"stargazers_count":64,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-11-22T17:51:24.977Z","etag":null,"topics":["apollo","configuration-center","configuration-comparison","configuration-management","configuration-tool","devops","gui","nacos","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hxz393.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":"assassing","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2023-11-07T01:02:38.000Z","updated_at":"2024-10-05T07:45:28.000Z","dependencies_parsed_at":"2024-06-17T07:28:33.698Z","dependency_job_id":"9effe0d2-ed12-4582-9e5d-3048d7263758","html_url":"https://github.com/hxz393/ConfigCenterComparer","commit_stats":null,"previous_names":["hxz393/configcentercomparer"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hxz393%2FConfigCenterComparer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hxz393%2FConfigCenterComparer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hxz393%2FConfigCenterComparer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hxz393%2FConfigCenterComparer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hxz393","download_url":"https://codeload.github.com/hxz393/ConfigCenterComparer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230345781,"owners_count":18211997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apollo","configuration-center","configuration-comparison","configuration-management","configuration-tool","devops","gui","nacos","python"],"created_at":"2024-11-13T02:07:48.346Z","updated_at":"2026-03-13T18:23:11.986Z","avatar_url":"https://github.com/hxz393.png","language":"Python","funding_links":["https://patreon.com/assassing"],"categories":[],"sub_categories":[],"readme":"# [English](https://github.com/hxz393/ConfigCenterComparer/blob/main/doc/README_EN.md) | [中文](https://github.com/hxz393/ConfigCenterComparer/blob/main/README.md)\n\n# 程序介绍\n\n`ConfigCenterComparer` 是一款配置中心对比工具。它主要用于比较不同配置中心的配置数据，确保环境间配置的一致性和准确性。\n\n主要特点：\n\n- **支持多种配置中心**：兼容主流的 `Apollo` 和 `Nacos` 配置中心。实现跨集群数据获取。\n- **数据格式化和比较**：提供图形界面，方便数据格式化和比较。\n- **数据库集成**：集成 MySQL 数据库查询模块，支持 SSH 隧道连接。\n- **日志记录和错误处理**：配备先进的日志系统和错误处理机制。\n- **实用功能**：包含搜索、复制、导出等多种功能，并设有忽略列表。\n\n主窗口截图：\n\n![main screen](https://raw.githubusercontent.com/hxz393/ConfigCenterComparer/main/doc/main_screen.jpg)\n\n## 使用要求\n\n下面使用场景介绍，除非明确说明不支持，否则需要自行测试结果。\n\n### 操作系统\n\n- **开发环境**：`Windows 10 专业工作站版`，版本 `22H2`。\n- **兼容性**：支持 `Win 7 x64` 及更高版本操作系统。不支持`Win XP`。支持服务器 `Windows Server 2008` 以上版本。\n- **跨平台特性**：由于 QT 跨平台特征，其他操作系统理论上可手动编译成可执行文件。编译指南详见下文。\n\n### 配置中心\n\nNacos 支持 `yaml` 格式的配置。不支持其他格式。\n\n已测试的配置中心及版本：\n\n- **Apollo**：`2.0.x`、`2.1.x`\n- **Nacos**：`v2.1.x `\n\n其他版本未经测试。数据库结构差异可能导致查询失败。欢迎反馈相关问题。\n\n### 数据库\n\n- **测试版本**：MySQL `5.7`。理论上 `8.x` 也可支持。\n- **大小写敏感**：数据库配置应关闭大小写敏感。Apollo 数据库查询 SQL 采用驼峰命名，无视大小写敏感配置。Nacos 数据库配置的兼容性待验证，欢迎反馈。\n\n\n\n## 获取程序\n\n在 Windows 平台，已打包两种版本。Win7 下可用版本，在文件名中标注了`-Win7(x64)`，请按需下载。其他操作系统用户，可尝试通过源码构建可执行程序，或在 Python IDE 中运行。\n\n### 下载地址\n\n软件下载方式：\n\n- **方式一**：前往 [release](https://github.com/hxz393/ConfigCenterComparer/releases) 页面下载 `ConfigCenterComparer.exe`。\n- **方式二**：通过 [百度网盘](https://pan.baidu.com/s/1RK7uBqaqgqJHLJbadXI48g?pwd=6666) 下载 `ConfigCenterComparer.7z` 压缩包，解压后运行。\n- **方式三**：直连 [下载](https://www.x2b.net/download/ConfigCenterComparer.7z)\n\n下载的压缩包，需要解压缩后再运行，否则程序配置将无处保存。\n\n### 自行打包\n\n手动编译需要事先安装好 `Python 3.7` 以上版本、`PyQT 5.10` 以上版本和 `pyinstaller 5.6` 软件包。其他第三方依赖库有：`PyMySQL`、`PyYAML`、`paramiko`、`requests`、`sshtunnel`，没有版本规定。\n\n编译步骤如下：\n\n1. 在安装有 `Git` 的主机上克隆项目。命令如下：\n\n   ```sh\n   git clone https://github.com/hxz393/ConfigCenterComparer.git\n   ```\n\n   或者在 [项目主页](https://github.com/hxz393/ConfigCenterComparer) 点击绿色`\u003c\u003e Code` 按钮选择 `Download ZIP` 选项，[下载](https://github.com/hxz393/ConfigCenterComparer/archive/refs/heads/main.zip) 源码压缩包。下载完毕后用压缩软件或命令工具解压缩。\n\n2. 使用命令切换到项目路径下面。\n\n   例如在 Windows 系统下面，打开 `CMD` 命令提示符，输入：\n\n   ```sh\n   cd B:\\git\\ConfigCenterComparer\n   B:\n   ```\n\n   在 Linux 系统下面，使用 `cd` 命令切换到项目路径下面：\n\n   ```sh\n   cd /root/ConfigCenterComparer\n   ```\n\n   如果使用 `PyCharm` 作为 IDE，可以直接在自带的终端栏目输入下面打包命令。\n\n3. 使用 `pyinstaller` 命令编译打包成可执行文件：\n\n   ```sh\n   pyinstaller -F -w -i media/main.ico --add-data 'media/;media' ConfigCenterComparer.py\n   ```\n\n   如果使用 `Anaconda` 作为虚拟环境，打包时要加上 `-p` 参数，指定虚拟环境所在目录。例如：\n   \n   ```sh\n   pyinstaller -F -w -i media/main.ico --add-data media/;media -p C:\\ProgramData\\Anaconda3\\envs\\ccc ConfigCenterComparer.py\n   ```\n   \n   成功编译后，可执行文件会生成到 `dist` 目录下面。\n\n\n\n## 开发相关\n\n下面是和开发有关的信息。\n\n### 程序原理\n\n本程序主要运行流程如下：\n\n1. 通过查询 Apollo 数据库的 `app`、`namespace` 和 `item` 表，获取到 `AppId`（或 `Name`）、`NamespaceName`、`Key`、`Value` 和 `DataChange_LastTime` 字段的数据。\n   如果是 Nacos 数据库，则查询 `config_info` 表中字段 `data_id`、`group_id`、`content` 和 `gmt_modified` 字段的数据。然后对 `content` 字段的 `yaml` 格式内容，解析分割成多条配置。\n2. 对每条配置信息，组合名字、分组和键名作为唯一索引，将各个环境的配置值和配置修改时间合并插入结果字典中。\n3. 对比各配置环境的值，得到一致性信息，更新到结果字典中。\n4. 通过对比过滤列表，得到是否过滤的信息，更新到结果字典中。\n5. 将所有结果插入到主窗口表格中。\n6. 应用过滤器对表行或单元进行着色。执行其他显示优化动作。\n\n如果程序运行中发生错误，只要不影响运行的，不会弹窗提示，但会在右下角状态栏标签中提示「发生错误」。可以查看日志是否有程序 Bug 或其他问题。\n\n### 模块说明\n\n项目结构说明如下：\n\n- `ConfigCenterComparer.py`：主程序。\n- `config/`：配置文件夹，包含语言字典和全局变量。\n- `lib/`：实用功能库，存放通用函数，包括文件处理、数据库查询等。\n- `media/`：媒体文件夹，存放图标等。\n- `module/`：包含项目相关函数的模块，如查询配置路径、执行查询和格式化结果。\n- `ui/`：和 UI 定义操作有关的模块。\n\n### 语言翻译\n\n由于程序文本量较少，因此使用一个语言字典来储存所有显示文字。文件路径是：`config\\lang_dict_all.py`，可在此文件中添加其他语言翻译。\n\n### 开源许可\n\n遵循 [GPL-3.0 license](https://github.com/hxz393/ConfigCenterComparer/blob/main/LICENSE)。违反开源社区准则，将追究法律责任。\n\n\n\n# 程序使用\n\n在使用 `ConfigCenterComparer` 前，请仔细阅读本章节。\n\n## 设置\n\n首次使用时，需先进入设置页面进行配置。\n\n### 程序设置\n\n在工具栏或「选项」菜单中，选择「程序设置」进入设置界面。如下图所示：\n\n![main settings](https://raw.githubusercontent.com/hxz393/ConfigCenterComparer/main/doc/main_settings.jpg)\n\n配置文件位于 `config\\config_main.json`。请勿手动修改以避免错误。若配置文件损坏，可删除重新生成。\n\n各配置项说明如下：\n\n- **选择语言**\n\n  默认为「English」。选择可切换程序显示语言。\n\n- **选择配置中心类型**\n\n  可选「Apollo」或「Nacos」。根据选择读取不同的连接配置文件。\n\n- **选择 Apollo 服务名字段**\n\n  当选择配置中心类型为「Apollo」时生效，设置数据库中哪个字段作为服务名显示字段。下拉框选项「AppId」和「Name」，分别对应 Apollo「应用信息」中的「AppId」和「应用名称」。\n\n- **表格颜色开关**\n\n  如果配置条目数量有上万条，可以关闭表格颜色展示，能大幅提高运行速度。\n\n- **替换服务名**\n\n  - 在输入框中填入「原名」和「新名」，可对服务名进行完全替换。通常用于不同环境内服务名对齐。例如开发环境的 AppId 为「1025」，其他环境的 AppId 名为「api-web」，将 1025 替换为 api-web 后，才好在程序中对 api-web 的配置进行对比。\n\n  - 可以设置多组服务名替换，各服务名之间用空格分开。「原名」和「新名」内的字段数量必须一致，内容一一对应，否则会截断多出的字段。替换操作每个服务名只进行一次。\n\n  - 服务名完全匹配的情况下，才会进行替换。上面的例子中，1025 并不会匹配到 AppId 为「10258」或「api-1025」的服务名。需要替换必须输入全名。\n\n  - 替换服务名在裁剪服务名之后进行，请注意下先后顺序。\n\n- **裁剪服务名**\n\n  - 删除服务名中的前缀或后缀。和替换服务名类似，用于服务名对齐。前缀从服务名开头匹配，后缀从从服务名末尾匹配，匹配到了则从服务名中删除匹配的文字。例如设置后缀裁剪为「.yaml」，则所有形如「api-web.yaml」的服务名，会被替换成「api-web」。\n  - 可以设置多组裁剪字段，各裁剪字段之间用空格分开。每个服务名只进行一次前缀和后缀裁剪，匹配到了则不进行后续判断。例如设置前缀裁剪为「pc-」，后缀裁剪为「.yaml -web」，则服务名「pc-api-web.yaml」最多被裁剪为「api-web」。\n  - 服务名裁剪和替换操作都严格区别大小写。\n\n### 连接设置\n\n配置好主设置后，还需要配置数据库。从工具栏或 「选项」菜单中，点击「连接配置」按钮或选项进入数据库配置窗口。如图所示：\n\n![connect settings](https://raw.githubusercontent.com/hxz393/ConfigCenterComparer/main/doc/connect_settings.jpg)\n\nApollo 和 Nacos 的连接配置分别保存在 `config\\config_apollo.json` 和 `config\\config_nacos.json`。同样，不建议手动修改。\n\n最多支持四套环境配置比对，通过选项卡点击切换。Apollo 和 Nacos 连接需要的配置一样，各配置项说明如下：\n\n- **启用**\n\n  勾选「MySQL 连接配置」中的「启用」选项后，当前环境才加入配置对比。如果需要通过 SSH 隧道连接数据库，勾选「SSH 隧道配置」中的「启用」选项，并填入相关参数。\n\n- **地址**\n\n  输入 MySQL 或 SSH 主机的 IP 地址或域名。例如：「192.168.1.1」或「yourdomain.com」。\n\n- **端口**\n\n  输入 MySQL 或 SSH 连接的端口号。例如：「3306」或「22」。\n\n- **用户名**\n\n  输入有连接权限的用户名。例如：「apollo」或「root」。\n\n- **密码**\n\n  输入连接用户名的密码。\n\n- **库名**\n\n  配置库所在的库名，例如 Apollo 默认使用的库名「ApolloConfigDB」，Nacos 默认使用的库名「nacos」。\n\n\n\n## 开始\n\n点击「测试连接」或「开始运行」按钮后，按钮变为灰色状态。运行完毕会显示弹窗或数据，完成时间主要由网络速度决定，请耐心等待。\n\n### 测试\n\n配置好数据库连接后，可以先进行连通性测试。从工具栏或 「开始」菜单中，点击「测试连接」按钮或选项进行测试：\n\n- 如果连接顺畅，大约 10 秒后会弹窗显示 MySQL 和 SSH 连接测试结果。\n- 如果有网络或配置问题，导致连接失败，可能需要一段时间才会弹窗显示测试结果。可以在「查看日志」中分析连接失败具体原因。\n\n### 运行\n\n所有配置完毕后，从工具栏或 「开始」菜单中，点击「开始运行」按钮或选项，开始从数据库中获取数据：\n\n- 如果一切顺利，主窗口表单中，将会显示所有从数据库中拉取到的数据。\n- 如果有个别环境连接失败，将不会在最终结果中展示对应环境配置。可以在「查看日志」中分析连接失败具体原因。\n- 如果要获取更新配置，可重新点击「开始运行」来更新表格。程序不会将结果缓存到本地文件中。\n\n### 查重\n\n从数据库获取到数据后，从工具栏或 「开始」菜单中，点击「配置查重」按钮或选项，可以对运行结果进行进一步查重。这个查重功能，对比的是同一环境下重复配置。例如：\n\n在公共配置中配置过数据库连接池大小，那么在其他应用私有配置中，同样配置数据库连接池大小，且值与公共环境一致，可以认为应用私有配置中存在重复配置。\n\n查重功能可以查找出此类配置。查重结果窗口如下图所示：\n\n![connect settings](https://raw.githubusercontent.com/hxz393/ConfigCenterComparer/main/doc/comparison_results.jpg)\n\n窗口分为两块：\n\n- 主要区域为查重结果表格，通过选项卡对不同环境进行区分。出了主窗口中见过的字段，最左侧还有一列数字行号，由分组号码和组内号码组成。\n- 上面有两个输入框，具体作用为：\n  - 公共配置输入框，用于标记公共配置所在行。输入公共配置名例如 `global` ，点击「设置」后，global 所在的整行会以红色字体显示。\n  - 搜索输入框，从配置键或值中搜索内容。没有匹配的行将会被隐藏。搜索字段不区分大小写。\n\n\n\n## 结果展示\n\n主界面从上到下分别为菜单栏、工具栏、过滤栏、主表格和状态栏，下面主要说明主表格。\n\n### 表头\n\n表头分为以下项目：\n\n- **服务**：服务名，Apollo 中为「AppId」或 「应用名称」。Nacos 中只有一个字段，为「Data Id」。\n- **分组**：Apollo 中的「Namespace」，一般私有命名空间叫「application」。Nacos 中的字段为 「Group」。\n- **配置键**：Apollo 中的 「Key」。Nacos 中为从「配置内容」提取的字段，格式和 Apollo 中的一样。\n- **值**：默认按不同环境分为四列，表头为环境名称。Apollo 中的 「Value」。Nacos 中为从「配置内容」提取的字段。\n- **修改时间**：默认隐藏。按不同环境分为四列，为对应环境配置最后修改时间。\n- **一致性**：分为四种状态。\n  - 完全一致：表示所有环境配置值完全相等。要求对比环境至少有两个。\n  - 部分一致：生产环境和预览环境的值相等，但与其他环境的值不等。\n  - 未知状态：仅单个环境配置有值。其他环境可能没有配置，也可能值获取失败。\n  - 不一致：所有不符合以上状态的情况，都归为不一致。\n- **忽略**：值为「是」或者「否」。为用户手动设置。\n\n表头支持拖动排列，点击表头能排序。表头右键菜单可以选择隐藏或显示某列数据。\n\n### 颜色\n\n获取到配置数据后，主窗口表单会以不同颜色显示每条配置状态。其含义代表如下：\n\n- 灰色：在忽略列表中，忽略值为「是」。\n- 绿色：一致性值为「完全一致」。\n- 蓝色：一致性值为「部分一致」。\n- 红色：没有配置或没有获取到配置值的单元。\n- 白色：默认状态。\n\n\n\n## 过滤操作\n\n过滤栏分为三部分：过滤服务、快速过滤和全局搜索。三种方法可组合使用，以便快速查找和对比配置。\n\n### 过滤服务\n\n在下拉框中选择服务名，表格中则只显示选中的服务配置。默认为显示所有配置。\n\n### 快速过滤\n\n针对「一致性」和「忽略」列的值进行过滤。在下拉框中选择过滤条件，选中的条件如果匹配某行的值，匹配行会从表格中隐藏。\n\n如果勾选「反选」框，则表格中只会展示匹配的行。\n\n### 全局搜索\n\n在输入框中输入搜索内容，点击搜索按钮，对所有表格数据进行字符串搜索。匹配值的单元以高亮显示，没有匹配值的行会隐藏。\n\n### 重置条件\n\n点击搜索按钮旁边的重置按钮，会将所有过滤条件重置，清除搜索输入框内容，显示完整的表格内容。\n\n\n\n## 编辑操作\n\n程序不会对原始配置做任何修改，忽略列表存放在本地 `config\\config_skip.txt` 文件中。\n\n### 复制内容\n\n用鼠标点击或拖动单元格，在右键弹出菜单或工具栏中选择「复制内容」，选中的数据会复制保存到系统剪切板中。\n\n### 导出列表\n\n将当前表格显示的数据，导出到文件中。从「编辑」菜单栏或表格右键菜单中，选择「导出列表」，在文件保存窗口选择导出格式。支持 `JSON` 或 `CSV` 格式，点击保存后即可导出。\n\n### 忽略操作\n\n用户可自定义要忽略的配置行。用鼠标点击或拖动单元格，在右键弹出菜单或工具栏中选择「加入忽略」，配置行会被标记为已忽略。之后可应用快速过滤来隐藏已忽略的配置行。\n\n解除忽略操作同理，选择「取消忽略」，配置行将从过滤列表中移除。\n\n\n\n## 帮助操作\n\n包括查看日志、检查程序新版本和查看程序信息功能。\n\n### 查看日志\n\n从「帮助」菜单或快速工具栏选择「查看日志」，打开日志查看窗口：\n\n![view logs](https://raw.githubusercontent.com/hxz393/ConfigCenterComparer/main/doc/view_logs.jpg)\n\n左上角下拉框可以选择要显示的日志等级。例如选择「WARNING」，则只会显示 WARNING 等级以上的日志，INFO 等级的日志信息会被过滤掉。\n\n左下角「提交反馈」按钮，点击会跳转到 GitHub 项目 Issues 页面，方便提交错误信息。\n\n左下角「清空」按钮，点击会清空日志文件内容。日志文件存放在 `logs` 目录内，超过 1MB 大小会回滚，最多保留十个文件。\n\n右下角「刷新」按钮，点击可以切换日志持续显示模式，方便监控日志。\n\n### 检查更新\n\n从「帮助」菜单选择「检查更新」，将会在线检查程序是否有更新版本。以弹窗告知检查结果。\n\n### 关于软件\n\n从「帮助」菜单选择「关于软件」，弹出程序说明和构建信息。\n\n### 调试程序\n\n开发调试代码使用，对用户没有实际作用。\n\n\n\n# 常见问题\n\n软件运行遇见错误时，先查看日志，如果是连接问题，请检查配置后再重试。然后参考下面常见问题解决方案。最后查看所有 [Issue](https://github.com/hxz393/ConfigCenterComparer/issues) 中是否有同样问题。如需进一步帮助，可以提交新 [Issue](https://github.com/hxz393/ConfigCenterComparer/issues) ，并附上相关日志。\n\n\n\n# 更新日志\n\n为避免更新日志过长，只保留最近更新日志。\n\n## 版本 1.1.0（2023.11.28）\n\n新增内容：\n\n1. 新增配置查重功能；\n2. 日志查看窗口新增刷新按钮。\n\n优化内容：\n\n1. 修改语言管理类，切换语言立即生效，不再需要重启；\n2. 修改配置管理类，减少对配置文件读取次数；\n3. 修改日志查看窗口显示模式，可独立主窗口运行；\n4. 修改代码以向下支持到 Python 3.7，并提供 Win 7 下可用版本。\n\n## 版本 1.0.2（2023.11.21）\n\n新增内容：\n\n1. 新增表格颜色开关，应对数据量过大导致性能下降。\n\n修复内容：\n\n1. 修改颜色应用逻辑，提升运行速度；\n2. 优化主线程代码，提高 UI 稳定性。\n\n\n\n## 版本 1.0.1（2023.11.19）\n\n修复内容：\n\n1. 开始运行前，清空过滤栏条件，避免再次运行时界面卡死；\n2. 优化日志显示文字。\n\n\n\n## 版本 1.0.0（2023.11.19）\n\n发布初版。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhxz393%2Fconfigcentercomparer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhxz393%2Fconfigcentercomparer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhxz393%2Fconfigcentercomparer/lists"}