搜索​​​​

清除过滤器
文章
Michael Lei · 五月 12, 2021

InterSystems 数据平台和性能 - 第 5 篇 使用 SNMP 进行监控

# InterSystems 数据平台和性能 - 第 5 部分 使用 SNMP 进行监控 在之前的帖子中,我展示了如何使用 pButtons 收集历史性能指标。 我首选 pButtons 是因为我知道它随每个数据平台实例(Ensemble、Caché、...)一起安装。 不过,还有其他方法可以实时收集、处理和显示 Caché 性能指标,以进行简单的监视,或进行更重要的并且复杂得多的运营分析和容量计划。 最常见的数据收集方法之一是使用 SNMP(简单网络管理协议)。 SNMP 是 Caché 向各种管理工具提供管理和监控信息的标准方式。 Caché 在线文档包含了 Caché 和 SNMP 之间接口的详细信息。 虽然 SNMP 应该可以直接与 Caché 配合工作,但仍有一些配置技巧和陷阱。 我经历了很多次错误的开始,并且在 InterSystems 其他同事的帮助下,才让 Caché 与操作系统 SNMP 主代理建立对话,所以我写了这篇帖子,希望您可以避免同样的痛苦。 在本帖中,我将介绍如何为 Red Hat Linux 上的 Caché 设置和配置 SNMP,您应该能够对其他 \*nix 版本使用相同步骤。 我使用 Red Hat 写这篇文章是因为在 Linux 上进行设置更棘手一些;在 Windows 上,Caché 会自动安装一个 DLL 来与标准 Windows SNMP 服务连接,所以应该更容易配置。 在服务器端设置 SNMP 后,就可以使用任意数量的工具开始监控。 我将展示如何使用流行的 PRTG 工具进行监控,但还有许多其他工具 - [这是部分列表](https://en.wikipedia.org/wiki/Comparison_of_network_monitoring_systems)。 注意 Caché 和 Ensemble 的 MIB 文件包含在 `Caché_installation_directory/SNMP` 文件夹中,这两个文件为:`ISC-CACHE.mib` 和 `ISC-ENSEMBLE.mib`。 #### 本系列的前几个帖子: - [第 1 部分 - 入门:收集指标。](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-1) - [第 2 部分 - 研究收集的指标。](https://cn.community.intersystems.com/post/intersystems-数据平台和性能-–-第-2篇) - [第 3 部分 - 聚焦 CPU。](https://cn.community.intersystems.com/post/intersystems-数据平台和性能-–-第-3-篇:聚焦-cpu) - [第 4 部分 - 关注内存。](https://cn.community.intersystems.com/post/intersystems-数据平台和性能-第-4-篇-关注内存) # 从这里开始... 首先查看 [Caché 在线文档](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCM_snmp)中的“使用 SNMP 监视 Caché”。 ## 1. Caché 配置 按照 [Caché 在线文档](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCM_snmp)的“_在 Caché 中管理 SNMP_”部分中的步骤,启用 Caché 监视服务,并将 Caché SNMP 子代理配置为在 Caché 启动时自动启动。 检查 Caché 进程是否正在运行,例如查看进程列表或操作系统: ps -ef | grep SNMP root 1171 1097 0 02:26 pts/1 00:00:00 grep SNMP root 27833 1 0 00:34 pts/0 00:00:05 cache -s/db/trak/hs2015/mgr -cj -p33 JOB^SNMP 就是这样,Caché 配置完成了! ## 2. 操作系统配置 这里的工作会多一些。 首先检查 snmpd 守护程序是否已安装并且正在运行。 如果结果为否,则安装并启动 snmpd。 检查 snmpd 状态: service snmpd status 启动或停止 snmpd: service snmpd start|stop 如果未安装 snmp,则必须按照操作系统说明进行安装,例如: yum -y install net-snmp net-snmp-utils ## 3. 配置 snmpd 如 Caché 文档中所述,在 Linux 系统上,最重要的任务是验证系统上的 SNMP 主代理是否与 Agent Extensibility (AgentX) 协议兼容(Caché 以子代理的形式运行),并且主代理处于活动状态,并在标准 AgentX TCP 端口 705 上侦听连接。 我在这里遇到了问题。 我在 `snmp.conf` 文件中犯了一些初级错误,意味着 Caché SNMP 子代理未与操作系统主代理进行通信。 以下示例 `/etc/snmp/snmp.conf` 文件已配置为启动 agentX 并提供对 Caché 和 Ensemble SNMP MIB 的访问。 _请注意,您必须确认以下配置是否符合您的组织的安全策略。_ 至少必须编辑以下几行以反映您的系统设置。 例如,将: syslocation "System_Location" 更改为 syslocation "Primary Server Room" 此外,至少编辑以下两行: syscontact "Your Name" trapsink Caché_database_server_name_or_ip_address public 编辑或替换现有 `/etc/snmp/snmp.conf` 文件以匹配以下内容: ############################################################################### # # snmpd.conf: # An example configuration file for configuring the NET-SNMP agent with Cache. # # This has been used successfully on Red Hat Enterprise Linux and running # the snmpd daemon in the foreground with the following command: # # /usr/sbin/snmpd -f -L -x TCP:localhost:705 -c./snmpd.conf # # You may want/need to change some of the information, especially the # IP address of the trap receiver of you expect to get traps. I've also seen # one case (on AIX) where we had to use the "-C" option on the snmpd command # line, to make sure we were getting the correct snmpd.conf file. # ############################################################################### ########################################################################### # SECTION: System Information Setup # # This section defines some of the information reported in # the "system" mib group in the mibII tree. # syslocation: The [typically physical] location of the system. # Note that setting this value here means that when trying to # perform an snmp SET operation to the sysLocation.0 variable will make # the agent return the "notWritable" error code. IE, including # this token in the snmpd.conf file will disable write access to # the variable. # arguments: location_string syslocation "System Location" # syscontact: The contact information for the administrator # Note that setting this value here means that when trying to # perform an snmp SET operation to the sysContact.0 variable will make # the agent return the "notWritable" error code. IE, including # this token in the snmpd.conf file will disable write access to # the variable. # arguments: contact_string syscontact "Your Name" # sysservices: The proper value for the sysServices object. # arguments: sysservices_number sysservices 76 ########################################################################### # SECTION: Agent Operating Mode # # This section defines how the agent will operate when it # is running. # master: Should the agent operate as a master agent or not. # Currently, the only supported master agent type for this token # is "agentx". # # arguments: (on|yes|agentx|all|off|no) master agentx agentXSocket tcp:localhost:705 ########################################################################### # SECTION: Trap Destinations # # Here we define who the agent will send traps to. # trapsink: A SNMPv1 trap receiver # arguments: host [community] [portnum] trapsink Caché_database_server_name_or_ip_address public ############################################################################### # Access Control ############################################################################### # As shipped, the snmpd demon will only respond to queries on the # system mib group until this file is replaced or modified for # security purposes. Examples are shown below about how to increase the # level of access. # # By far, the most common question I get about the agent is "why won't # it work?", when really it should be "how do I configure the agent to # allow me to access it?" # # By default, the agent responds to the "public" community for read # only access, if run out of the box without any configuration file in # place. The following examples show you other ways of configuring # the agent so that you can change the community names, and give # yourself write access to the mib tree as well. # # For more information, read the FAQ as well as the snmpd.conf(5) # manual page. # #### # First, map the community name "public" into a "security name" # sec.name source community com2sec notConfigUser default public #### # Second, map the security name into a group name: # groupName securityModel securityName group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser #### # Third, create a view for us to let the group have rights to: # Make at least snmpwalk -v 1 localhost -c public system fast again. # name incl/excl subtree mask(optional) # access to 'internet' subtree view systemview included .1.3.6.1 # access to Cache MIBs Caché and Ensemble view systemview included .1.3.6.1.4.1.16563.1 view systemview included .1.3.6.1.4.1.16563.2 #### # Finally, grant the group read-only access to the systemview view. # group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact systemview none none 编辑 `/etc/snmp/snmp.conf` 文件后,重启 snmpd 守护程序。 service snmpd restart 检查 snmpd 状态,注意出现状态行 __Turning on AgentX master support__,说明 AgentX 已启动。 h-4.2# service snmpd restart Redirecting to /bin/systemctl restart snmpd.service sh-4.2# service snmpd status Redirecting to /bin/systemctl status snmpd.service ● snmpd.service - Simple Network Management Protocol (SNMP) Daemon. Loaded: loaded (/usr/lib/systemd/system/snmpd.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2016-04-27 00:31:36 EDT; 7s ago Main PID: 27820 (snmpd) CGroup: /system.slice/snmpd.service └─27820 /usr/sbin/snmpd -LS0-6d -f Apr 27 00:31:36 vsan-tc-db2.iscinternal.com systemd[1]: Starting Simple Network Management Protocol (SNMP) Daemon.... Apr 27 00:31:36 vsan-tc-db2.iscinternal.com snmpd[27820]: Turning on AgentX master support. Apr 27 00:31:36 vsan-tc-db2.iscinternal.com snmpd[27820]: NET-SNMP version 5.7.2 Apr 27 00:31:36 vsan-tc-db2.iscinternal.com systemd[1]: Started Simple Network Management Protocol (SNMP) Daemon.. sh-4.2# 重启 snmpd 后,必须使用 `^SNMP` 例程重启 Caché SNMP 子代理: %SYS>do stop^SNMP() %SYS>do start^SNMP(705,20) 操作系统 snmpd 守护程序和 Caché 子代理此时应该正在运行并且可访问。 ## 4. 测试 MIB 访问 可以在命令行中使用以下命令检查 MIB 访问。 `snmpget` 返回一个值: snmpget -mAll -v 2c -c public vsan-tc-db2 .1.3.6.1.4.1.16563.1.1.1.1.5.5.72.50.48.49.53 SNMPv2-SMI::enterprises.16563.1.1.1.1.5.5.72.50.48.49.53 = STRING: "Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2015.2.1 (Build 705U) Mon Aug 31 2015 16:53:38 EDT" `snmpwalk` 将“遍历”MIB 树或分支: snmpwalk -m ALL -v 2c -c public vsan-tc-db2 .1.3.6.1.4.1.16563.1.1.1.1 SNMPv2-SMI::enterprises.16563.1.1.1.1.2.5.72.50.48.49.53 = STRING: "H2015" SNMPv2-SMI::enterprises.16563.1.1.1.1.3.5.72.50.48.49.53 = STRING: "/db/trak/hs2015/cache.cpf" SNMPv2-SMI::enterprises.16563.1.1.1.1.4.5.72.50.48.49.53 = STRING: "/db/trak/hs2015/mgr/" etc etc 还有几个 Windows 和 \*nix 客户端可用于查看系统数据。 我使用免费的 iReasoning MIB Browser。 您需要将 ISC-CACHE.MIB 文件加载到客户端中,以便它了解 MIB 的结构。 下图显示了 OSX 上的 iReasoning MIB Browser。 ![免费的 iReasoning MIB Browser](https://community.intersystems.com/sites/default/files/inline/images/mib_browser_0.png) ## 包括在监视工具中 这里是实施过程中可能有较大差异的地方。 监视或分析工具由您选择。 _请为本帖留下评论,详细说明您使用的工具,以及通过该工具获得的系统监视和管理数值。 这将对其他社区成员有很大帮助。_ 下面是流行的 _PRTG_ 网络监视器的截图,其中显示了 Caché 指标。 将 Caché 指标包括在 PRTG 中的步骤与其他工具类似。 ![PRTG 监视工具](https://community.intersystems.com/sites/default/files/inline/images/prtg_0.png) ### 示例工作流程 - 将 Caché MIB 添加到监视工具中。 #### 第 1 步. 确保您可以连接到操作系统 MIB。 一个提示是针对操作系统而非 Caché 进行故障排除。 监视工具很可能已经了解常见的操作系统 MIB 并针对它们进行了预先配置,因此更容易获得供应商或其他用户的帮助。 根据您选择的监视工具,您可能需要添加 SNMP“模块”或“应用程序”,它们通常是免费或开源的。 我发现供应商对此步骤的说明相当简单直接。 监视操作系统指标后,就该添加 Caché 了。 #### 第 2 步. 将 `ISC-CACHE.mib` 和 `ISC-ENSEMBLE.mib` 导入到工具中,以便其了解 MIB 结构。 这里的步骤各不相同,例如 PRTG 有一个“MIB Importer”实用工具。 基本步骤是在工具中打开文本文件 `ISC-CACHE.mib`,然后将其导入为工具内部格式。 例如,Splunk 使用 Python 格式等。 _注:_我发现如果试图添加一个带有所有 Caché MIB 分支的传感器,PRTG 工具会超时。 我假定它在遍历整个树,并在处理进程列表等某些指标时超时,我没有花时间进行故障排除,而是通过只从 `ISC-CACHE.mib` 中导入性能分支 (cachePerfTab) 来解决这个问题。 MIB 经过导入/转换后可以重复使用,以收集网络中其他服务器的数据。 上图显示了 PRTG 使用 Sensor Factory 传感器将多个传感器组合成一个图表。 # 总结 有许多监视工具、报警工具和一些非常智能的分析工具可用,一些是免费的,另一些需要购买许可证来获得支持和各种功能。 您必须监视您的系统,并了解哪个活动是正常的,哪个活动超出正常范围且必须被调查。 SNMP 是揭示 Caché 和 Ensemble 指标的一种简单方法。 这个可以写一个windows版的学习下吗 我们到海外社区找找看,您要是找到合适的可以发给我们,我们尽快安排翻译。谢谢!
公告
Michael Lei · 五月 13, 2021

InterSystems IRIS 机器学习工具包管理微软 Azure 数据工厂 Data Factory 与机器学习

Intersystems RIS 机器学习工具包, 包括Python/R/Julia, 支持协调管理基于云的高级分析服务,如微软Azure数据工厂和机器学习。
公告
jieliang liu · 五月 23, 2021

InterSystems API Manager (IAM)的2.3版本的正式版本已经发布!

InterSystems API Manager (IAM)的2.3版本的正式版本已经发布。 IAM的容器,包括从IAM早期版本升级的所有相关工件,可以从。WRC软件分发站点 的组件区下载. 这个版本的构建号是IAM 2.3.3.2-1。 这个版本是基于Kong企业版2.3.3.2。 InterSystems API Manager 2.3使其更容易以安全的方式和高可用性的场景进行部署 它有许多新的功能,包括: 引入了混合模式 更广泛地支持Docker Secrets 混合模式允许你在数据面和控制面部署IAM节点。当数据平面处理API流量时,控制平面用于配置数据平面节点并观察来自数据平面的遥测数据。这赋予了部署更多的灵活性,减轻了部署HA场景的工作量。关于混合模式的更多信息可以在[这里](https://docs.konghq.com/enterprise/2.3.x/deployment/hybrid-mode/)找到。在接下来的日子里,InterSystems开发者社区也将更详细地介绍这一功能。 IAM 2.3的文档可以在 这里找到。该文档只涉及IAM特有的元素。产品中的文档链接将用户直接带到Kong Enterprise的文档。 从IAM 1.5.0.9升级需要通过两个中间版本进行增量升级,这在文档中会有更详细的描述。 IAM仅以OCI(Open Container Initiative)又称Docker容器格式提供。容器镜像可用于Linux x86-64和Linux ARM64的OCI兼容运行时引擎,详见 支持平台文件。 Best Regards, Stefan
文章
Michael Lei · 七月 27, 2021

示例:使用默认 REST API 查看 InterSystems IRIS 中的监控指标

以下步骤展示如何显示 `/api/monitor` 服务提供的指标列表示例。 在上个帖子中,我概述了以 Prometheus 格式显示 IRIS 指标的服务。 该贴介绍了如何在容器中设置和运行 [IRIS 预览版 2019.4](https://community.intersystems.com/post/intersystems-iris-and-iris-health-20194-preview-published),然后列出了指标。 本帖假定您已安装 Docker。 如果未安装,现在就为您的平台安装吧 :) ### 步骤 1. 下载并运行 docker 形式的 IRIS 预览版 按照[预览发行版](https://wrc.intersystems.com/wrc/coDistPreview.csp "Preview Distributions")的下载说明下载**预览版许可证密钥**和 **IRIS Docker 映像**。 例如,我选择了 **InterSystems IRIS for Health 2019.4**。 按照 [Docker 容器中的 InterSystems 产品初见](https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=AFL_containers "Run IRIS in a container instructions")中的说明操作。 如果您熟悉容器,请跳转到标题为“**下载 InterSystems IRIS Docker 映像**”的部分。 以下终端输出说明了我用来加载 docker 映像的过程。 docker load 命令可能需要几分钟的时间才能运行; $ pwd /Users/myhome/Downloads/iris_2019.4 $ ls InterSystems IRIS for Health (Container)_2019.4.0_Docker(Ubuntu)_12-31-2019.ISCkey irishealth-2019.4.0.379.0-docker.tar $ docker load -i irishealth-2019.4.0.379.0-docker.tar 762d8e1a6054: Loading layer [==================================================>] 91.39MB/91.39MB e45cfbc98a50: Loading layer [==================================================>] 15.87kB/15.87kB d60e01b37e74: Loading layer [==================================================>] 12.29kB/12.29kB b57c79f4a9f3: Loading layer [==================================================>] 3.072kB/3.072kB b11f1f11664d: Loading layer [==================================================>] 73.73MB/73.73MB 22202f62822e: Loading layer [==================================================>] 2.656GB/2.656GB 50457c8fa41f: Loading layer [==================================================>] 14.5MB/14.5MB bc4f7221d76a: Loading layer [==================================================>] 2.048kB/2.048kB 4db3eda3ff8f: Loading layer [==================================================>] 1.491MB/1.491MB Loaded image: intersystems/irishealth:2019.4.0.379.0 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE intersystems/irishealth 2019.4.0.379.0 975a976ad1f4 3 weeks ago 2.83GB 为简单起见,将密钥文件复制将用于持久性存储的文件夹位置,并重命名为 `iris.key`; $ mkdir -p /Users/myhome/iris/20194 $ cp 'InterSystems IRIS for Health (Container)_2019.4.0_Docker(Ubuntu)_12-31-2019.ISCkey' /Users/myhome/iris/20194/iris.key $ cd /Users/myhome/iris/20194 $ ls iris.key 使用为持久性存储创建的文件夹启动 IRIS; $ docker run --name iris --init --detach --publish 52773:52773 --volume `pwd`:/external intersystems/irishealth:2019.4.0.379.0 --key /external/iris.key $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 009e52c121f0 intersystems/irishealth:2019.4.0.379.0 "/iris-main --key /e…" About a minute ago Up About a minute (healthy) 0.0.0.0:52773->52773/tcp iris 很好! 您现在可以连接到正在运行的容器上的[系统管理门户](http://localhost:52773/csp/sys/%25CSP.Portal.Home.zen "Home SMP")。 我使用的登录名/密码是 _SuperUser/SYS_;您第一次登录时会被提示更改密码。 导航到 Web 应用程序。 `System > Security Management > Web Applications` 您将看到一个 Web 应用程序:`/api/monitor`,这是用于显示 IRIS 指标的服务。 > **您无需执行任何操作即可返回指标,它直接可用。** ### 步骤 2. 预览指标 在以后的帖子中,我们将使用 Prometheus 或 SAM _抓取_此端点,以设置的间隔收集指标。 但现在,让我们看一下为此实例返回的指标的完整列表。 例如,在 Linux 和 OSX 上,一个简单的方法是使用 `curl` 命令发出一个 HTTP GET。 例如,在我的(几乎不活动的)容器上,列表的开头为: $ curl localhost:52773/api/monitor/metrics : : iris_cpu_usage 0 iris_csp_activity{id="127.0.0.1:52773"} 56 iris_csp_actual_connections{id="127.0.0.1:52773"} 8 iris_csp_gateway_latency{id="127.0.0.1:52773"} .588 iris_csp_in_use_connections{id="127.0.0.1:52773"} 1 iris_csp_private_connections{id="127.0.0.1:52773"} 0 iris_csp_sessions 1 iris_cache_efficiency 35.565 : : 等等。 在生产系统上,该列表可能非常长。 我在帖子末尾转储了完整列表。 另一个实用方法是使用 [Postman 应用程序](https://www.getpostman.com "POSTMAN"),但还有其他方法。 假定您已安装适合您的平台的 Postman,则可以发出 HTTP GET 并查看返回的指标。 ## 总结 暂时就这么多内容。 在下个帖子中,我将从收集 _Prometheus_ 中的数据开始,并查看一个 _Grafana_ 仪表板示例。 ### 预览容器中的完整列表 生产系统将提供更多指标。 从一些标签中可以看出,例如 `{id="IRISLOCALDATA"}` ,有一些指标与数据库有关,或者按进程类型对应于 CPU `{id="CSPDMN"}`。 iris_cpu_pct{id="CSPDMN"} 0 iris_cpu_pct{id="CSPSRV"} 0 iris_cpu_pct{id="ECPWorker"} 0 iris_cpu_pct{id="GARCOL"} 0 iris_cpu_pct{id="JRNDMN"} 0 iris_cpu_pct{id="LICENSESRV"} 0 iris_cpu_pct{id="WDSLAVE"} 0 iris_cpu_pct{id="WRTDMN"} 0 iris_cpu_usage 0 iris_csp_activity{id="127.0.0.1:52773"} 57 iris_csp_actual_connections{id="127.0.0.1:52773"} 8 iris_csp_gateway_latency{id="127.0.0.1:52773"} .574 iris_csp_in_use_connections{id="127.0.0.1:52773"} 1 iris_csp_private_connections{id="127.0.0.1:52773"} 0 iris_csp_sessions 1 iris_cache_efficiency 35.850 iris_db_expansion_size_mb{id="ENSLIB"} 0 iris_db_expansion_size_mb{id="HSCUSTOM"} 0 iris_db_expansion_size_mb{id="HSLIB"} 0 iris_db_expansion_size_mb{id="HSSYS"} 0 iris_db_expansion_size_mb{id="IRISAUDIT"} 0 iris_db_expansion_size_mb{id="IRISLOCALDATA"} 0 iris_db_expansion_size_mb{id="IRISSYS"} 0 iris_db_expansion_size_mb{id="IRISTEMP"} 0 iris_db_free_space{id="ENSLIB"} .055 iris_db_free_space{id="HSCUSTOM"} 2.3 iris_db_free_space{id="HSLIB"} 113 iris_db_free_space{id="HSSYS"} 9.2 iris_db_free_space{id="IRISAUDIT"} .094 iris_db_free_space{id="IRISLOCALDATA"} .34 iris_db_free_space{id="IRISSYS"} 6.2 iris_db_free_space{id="IRISTEMP"} 20 iris_db_latency{id="ENSLIB"} 0.030 iris_db_latency{id="HSCUSTOM"} 0.146 iris_db_latency{id="HSLIB"} 0.027 iris_db_latency{id="HSSYS"} 0.018 iris_db_latency{id="IRISAUDIT"} 0.017 iris_db_latency{id="IRISSYS"} 0.020 iris_db_latency{id="IRISTEMP"} 0.021 iris_db_max_size_mb{id="ENSLIB"} 0 iris_db_max_size_mb{id="HSCUSTOM"} 0 iris_db_max_size_mb{id="HSLIB"} 0 iris_db_max_size_mb{id="HSSYS"} 0 iris_db_max_size_mb{id="IRISAUDIT"} 0 iris_db_max_size_mb{id="IRISLOCALDATA"} 0 iris_db_max_size_mb{id="IRISSYS"} 0 iris_db_max_size_mb{id="IRISTEMP"} 0 iris_db_size_mb{id="HSLIB",dir="/usr/irissys/mgr/hslib/"} 1321 iris_db_size_mb{id="HSSYS",dir="/usr/irissys/mgr/hssys/"} 21 iris_db_size_mb{id="ENSLIB",dir="/usr/irissys/mgr/enslib/"} 209 iris_db_size_mb{id="IRISSYS",dir="/usr/irissys/mgr/"} 113 iris_db_size_mb{id="HSCUSTOM",dir="/usr/irissys/mgr/HSCUSTOM/"} 11 iris_db_size_mb{id="IRISTEMP",dir="/usr/irissys/mgr/iristemp/"} 21 iris_db_size_mb{id="IRISAUDIT",dir="/usr/irissys/mgr/irisaudit/"} 1 iris_db_size_mb{id="IRISLOCALDATA",dir="/usr/irissys/mgr/irislocaldata/"} 1 iris_directory_space{id="HSLIB",dir="/usr/irissys/mgr/hslib/"} 53818 iris_directory_space{id="HSSYS",dir="/usr/irissys/mgr/hssys/"} 53818 iris_directory_space{id="ENSLIB",dir="/usr/irissys/mgr/enslib/"} 53818 iris_directory_space{id="IRISSYS",dir="/usr/irissys/mgr/"} 53818 iris_directory_space{id="HSCUSTOM",dir="/usr/irissys/mgr/HSCUSTOM/"} 53818 iris_directory_space{id="IRISTEMP",dir="/usr/irissys/mgr/iristemp/"} 53818 iris_directory_space{id="IRISAUDIT",dir="/usr/irissys/mgr/irisaudit/"} 53818 iris_disk_percent_full{id="HSLIB",dir="/usr/irissys/mgr/hslib/"} 10.03 iris_disk_percent_full{id="HSSYS",dir="/usr/irissys/mgr/hssys/"} 10.03 iris_disk_percent_full{id="ENSLIB",dir="/usr/irissys/mgr/enslib/"} 10.03 iris_disk_percent_full{id="IRISSYS",dir="/usr/irissys/mgr/"} 10.03 iris_disk_percent_full{id="HSCUSTOM",dir="/usr/irissys/mgr/HSCUSTOM/"} 10.03 iris_disk_percent_full{id="IRISTEMP",dir="/usr/irissys/mgr/iristemp/"} 10.03 iris_disk_percent_full{id="IRISAUDIT",dir="/usr/irissys/mgr/irisaudit/"} 10.03 iris_ecp_conn 0 iris_ecp_conn_max 2 iris_ecp_connections 0 iris_ecp_latency 0 iris_ecps_conn 0 iris_ecps_conn_max 1 iris_glo_a_seize_per_sec 0 iris_glo_n_seize_per_sec 0 iris_glo_ref_per_sec 7 iris_glo_ref_rem_per_sec 0 iris_glo_seize_per_sec 0 iris_glo_update_per_sec 2 iris_glo_update_rem_per_sec 0 iris_journal_size 2496 iris_journal_space 50751.18 iris_jrn_block_per_sec 0 iris_jrn_entry_per_sec 0 iris_jrn_free_space{id="WIJ",dir="default"} 50751.18 iris_jrn_free_space{id="primary",dir="/usr/irissys/mgr/journal/"} 50751.18 iris_jrn_free_space{id="secondary",dir="/usr/irissys/mgr/journal/"} 50751.18 iris_jrn_size{id="WIJ"} 100 iris_jrn_size{id="primary"} 2 iris_jrn_size{id="secondary"} 0 iris_license_available 31 iris_license_consumed 1 iris_license_percent_used 3 iris_log_reads_per_sec 5 iris_obj_a_seize_per_sec 0 iris_obj_del_per_sec 0 iris_obj_hit_per_sec 2 iris_obj_load_per_sec 0 iris_obj_miss_per_sec 0 iris_obj_new_per_sec 0 iris_obj_seize_per_sec 0 iris_page_space_per_cent_used 0 iris_phys_mem_per_cent_used 95 iris_phys_reads_per_sec 0 iris_phys_writes_per_sec 0 iris_process_count 29 iris_rtn_a_seize_per_sec 0 iris_rtn_call_local_per_sec 10 iris_rtn_call_miss_per_sec 0 iris_rtn_call_remote_per_sec 0 iris_rtn_load_per_sec 0 iris_rtn_load_rem_per_sec 0 iris_rtn_seize_per_sec 0 iris_sam_get_db_sensors_seconds .000838 iris_sam_get_jrn_sensors_seconds .001024 iris_system_alerts 0 iris_system_alerts_new 0 iris_system_state 0 iris_trans_open_count 0 iris_trans_open_secs 0 iris_trans_open_secs_max 0 iris_wd_buffer_redirty 0 iris_wd_buffer_write 0 iris_wd_cycle_time 0 iris_wd_proc_in_global 0 iris_wd_size_write 0 iris_wd_sleep 10002 iris_wd_temp_queue 42 iris_wd_temp_write 0 iris_wdwij_time 0 iris_wd_write_time 0 iris_wij_writes_per_sec 0
公告
jieliang liu · 二月 8, 2022

InterSystems IRIS 和 IRIS for Health 2021.2 正式发布!

InterSystems 数据平台团队非常高兴地宣布,InterSystems IRIS数据平台、InterSystems IRIS for Health和HealthShare Health Connect的2021.2版本现已向我们的客户和合作伙伴全面开放(GA)。 发布重点: InterSystems IRIS数据平台2021.2使开发、部署和管理连接数据和应用孤岛的增强型应用和业务流程更加容易。它有许多新的功能和改进! 为应用程序和界面开发人员提供的增强功能,包括: 嵌入式Python 使用Python进行互操作性开发 对Visual Studio Code ObjectScript扩展包的更新 增加了新的业务服务和操作,允许用户以最少的自定义编码来设置和运行SQL查询 对分析和人工智能的增强,包括: 新的SQL LOAD命令有效地将CSV和JDBC源数据加载到表中 增强适应性分析的功能 对云计算和运营任务的加强,包括: 新的云连接器使得在InterSystems IRIS应用程序中访问和使用云服务变得简单。 IKO的改进提高了Kubernetes资源的可管理性 对数据库和系统管理员的增强,包括: 在线分片再平衡可以在不中断操作的情况下自动在各节点间分配数据 自适应SQL引擎使用快速块采样和自动化来收集高级表的统计数据,并利用运行时信息来改进查询规划 通过新的流和日志文件压缩设置,InterSystems IRIS的存储需求得以降低 支持TLS 1.3和OpenSSL 1.1.1,使用系统提供的库 新的^TRACE工具报告详细的进程统计数据,如缓存点击率和读取率 关于所有这些功能的更多细节可以在产品文档中找到: InterSystems IRIS 2021.2 documentation and release notes InterSystems IRIS for Health 2021.2 documentation and release notes HealthShare Health Connect 2021.2 documentation and release notes 如何获得软件 InterSystems IRIS 2021.2是一个持续交付(CD)版本,现在带有所有支持平台的经典安装包,以及OCI(Open Container Initiative)(又称Docker容器格式)的容器镜像。 容器镜像可用于Linux x86-64和Linux ARM64的OCI兼容运行时引擎。 详见 支持平台文档. 每个持续交付产品的完整安装包都可以从WRC 支持中心的网站 获得 . 使用 "自定义 "安装选项使用户能够挑选他们需要的选项,如InterSystems Studio和IntegratedML,以正确地缩小他们的安装范围。 容器镜像 企业版本,和社区版本 和所有的相关组件都可以从 InterSystems Container Registry 使用以下命令获得: docker pull containers.intersystems.com/intersystems/iris:2021.2.0.649.0 docker pull containers.intersystems.com/intersystems/iris-ml:2021.2.0.649.0 docker pull containers.intersystems.com/intersystems/irishealth:2021.2.0.649.0 docker pull containers.intersystems.com/intersystems/irishealth-ml:2021.2.0.649.0 有关可用镜像的完整列表,请参考 ICR 文档. 另外,所有容器镜像的tarball版本可以通过WRC的 CD容器产品下载网站获得。. 我们在主要云市场上的相应列表将在未来几天内更新。 分享你的经验 我们很高兴看到这个版本现在达到了GA的里程碑,并渴望听到你对新软件的体验。请不要犹豫,通过InterSystmes的销售团队或 开发者社区 与我们联系。 对于选定的新功能和产品,我们已经建立了早期试用计划,允许我们的用户在软件发布之前进行评估。通过这些有针对性的举措,我们可以向目标受众学习,确保新产品在发布时能满足他们的需求。如果你有兴趣参与其中的任何一项,请通过InterSystems销售团队或 开发者社区 与我们联系。
文章
Claire Zheng · 九月 13, 2021

InterSystems IRIS医疗版互联互通套件”线上发布会(9月17日)邀请报名启动

针对新近面向中国推出的InterSystems IRIS医疗版互联互通套件,InterSystems将在9月17日(本周五)举办“InterSystems IRIS医疗版互联互通套件”线上发布会,会议详情如下,欢迎点击“此处”或扫描下方二维码报名。此次会议为邀请参会制,收到您的报名信息后,我们会及时与您确认参会资格并发送会议链接。
公告
Claire Zheng · 十月 23, 2021

2021全球峰会! Win. Win. Win with InterSystems Developer Ecosystem~

亲爱的开发者们, 是否准备参加InterSystems 2021全球峰会呢?不要错过InterSystems Developer Community、Open Exchange和Global Masters的专题会议! ⚡️ "Win. Win. Win with InterSystems Developer Ecosystem" VSummit21 session ⚡️ 🎁 注意:所有参会者都将获得额外奖励哦~ 分享嘉宾:🗣 @Anastasia.Dyubaylo, InterSystems开发者社区经理 🗣 @Lena.Evsikova, Product Owner of InterSystems Open Exchange🗣 @Olga.Zavrazhnova2637, Customer Advocacy Manager, InterSystems 了解如何更好地使用 InterSystems 开发者社区、Global Masters (游戏化中心)和Open Exchange(应用程序库)。 兴趣: 开发经验,InterSystems IRIS,用户社区 论坛从10月27日起即可观看!(中国用户需注册观看) 来吧! 加入我们的会议,享受InterSystems技术和我们为开发者提供的生态系统的完整体验!
公告
Louis Lu · 十二月 16, 2021

InterSystems IRIS 和 IRIS for Health 2021.2 预览版发布

InterSystems IRIS、IRIS for Health 以及 HealthShare Health Connect 的 2021.2 版本的预览版现已发布。 由于这是一个预览版,我们希望在下个通用版本发布之前了解您对这个新版本的体验。请通过开发者社区分享您的反馈,以便我们能够共同打造一个更好的产品。 InterSystems IRIS 数据平台 在 2021.2 版本中使开发、部署和管理用于连接数据、应用孤岛的增强型应用和业务流程变得更加容易。它有许多新的功能,包括: 为应用程序和界面开发人员提供的增强功能: 嵌入式Python 使用 Python 进行的互操作性Production开发 对Visual Studio Code ObjectScript扩展包的更新 增加了新的商业服务和操作,允许用户用最少的自定义编码来设置和运行SQL查询 对数据分析和人工智能的增强: 新的SQL LOAD命令有效地将CSV和JDBC源的数据加载到表中 增强自适应分析功能 对云和云上运营任务的增强: 新的云连接器使得在 InterSystems IRIS 应用程序中访问和使用云服务变得简单。 IKO的改进提高了Kubernetes 资源的可管理性 针对数据库和系统管理员的增强功能: 在线分片再平衡可以在不中断操作的情况下自动在各节点间分配数据 自适应 SQL 引擎使用快速块采样和自动化来收集高级表的统计数据,并利用运行时信息来改进查询规划 通过新的流类型数据和日志文件压缩设置,减少InterSystems IRIS的存储需求 使用系统提供的库,支持 TLS 1.3 和 OpenSSL 1.1.1 新的^TRACE工具报告详细的进程统计数据,如缓存点击率和读取率 关于所有这些功能的更多细节可以在产品文档中找到。 InterSystems IRIS 2021.1文档和发布说明 InterSystems IRIS for Health 2021.1 文档和发布说明 HealthShare Health Connect 2021.1 文档和发布说明 InterSystems IRIS 2021.2是一个持续交付(CD)版本,现在为所有支持的平台提供经典安装包,以及OCI(Open Container Initiative)又称Docker容器格式的容器镜像。 容器镜像可用于符合OCI标准的Linux x86-64和Linux ARM64的运行时引擎,详见支持平台。 每个产品的完整安装包都可以从WRC的产品下载网站获得。使用 "自定义 "安装选项,用户可以选择他们需要的选项,如 InterSystems Studio 和IntegratedML,以合理地缩小安装内容。 安装包和预览密钥可以从WRC的预览下载站点获得。 企业版、社区版和所有相应组件的容器镜像可以通过以下命令从 InterSystems容器注册中心获得。 docker pull containers.intersystems.com/intersystems/iris:2021.2.0.617.0 docker pull containers.intersystems.com/intersystems/iris-ml:2021.2.0.617.0 docker pull containers.intersystems.com/intersystems/irishealth:2021.2.0.617.0 docker pull containers.intersystems.com/intersystems/irishealth-ml:2021.2.0.617.0 关于可用镜像的完整列表,请参考ICR文档。 另外,所有容器镜像的tarball版本可以通过WRC的预览版下载网站获得。 该预览版的构建号是2021.2.0.617.0。
文章
Michael Lei · 六月 11, 2022

InterSystems 最佳实践系列文章--系统性能组件SystemPerformance (原 pButtons) API和UI示例

在检查我们的^pButtons(在IRIS中改名为^SystemPerformance)性能监控工具的文档时,一位客户告诉我。"我理解所有内容,但我希望它能更简单......更容易定义配置文件,管理它们等等"。 在这次会议之后,我认为尝试为其提供一些更简单的人机界面是一个不错的试验。 这方面的第一步是在现有的pButtons例程上包裹一个基于类的API。 我还能够添加一些更多的 "功能",比如显示当前正在运行的配置文件,它们剩余的运行时间,以前运行的进程等等。 下一步是在这个API的基础上添加一个REST API类。 有了这个工件(pButtons REST API),人们就可以在上面建立一个比较时髦的用户界面。 举个🌰: - 我在这里分享这个方法的几个步骤: 两个类是 "Basic "API – 以及REST API(包括一些单元测试类来测试这些)。 一个用于REST API的Swagger JSON。为了构建这个,我使用了当时(2017年)InterSystems IRIS中尚未发布的REST管理功能。在InterSystems IRIS提供的基本Swagger JSON的基础上,我添加了更多的信息。 以及一个更加简单的angular UI界面 (基于 http://websystique.com/angularjs/angularjs-crud-application-using-ngresource/) 几个重点提示: 大多数的 "Basic "API方法都使用有文档的和官方支持的pButtons/SystemPerformance rountine的入口点。但有些方法是访问由pButtons工具管理的内部结构。这些方法没有被记录下来,也不被支持,这些方法在升级后可能会停止工作而不被通知。 这段代码不应该作为使用InterSystems IRIS构建基于REST的Angular应用程序的 "最佳实践 "范例。UI部分只是作为一个例子/"预告 "和示例的起点,[例如,它并不完整--"常规部分"(例如,日志文件夹位置管理的占位符)没有实现;刷新内容并不完全工作,以及其他一些 "已知问题..."] 这段代码最早是在很久之前写的--所以: (a) 我重新检查/测试/修改确保能在IRIS上运行 (包括改些名字等等). (b) REST API并没有使用需求/设计优先的方法--我最初确实玩过(当时)IRIS-beta对生成Swagger的支持,现在用它把这个变成了需求/设计优先的方法. (c) 这个可能没有用到最新的特性. (d) 我现在还增加了对在Docker容器中运行的支持(有相关的Docker文件等)。 (e) 我还增加了能作为ZPM包安装的支持。 应用和源代码:https://openexchange.intersystems.com/package/sys-perf-restapi
文章
Claire Zheng · 十二月 13, 2021

InterSystems IRIS 实用案例: 为什么说是时候迁移 Caché 和 Ensemble 应用了?

我在 InterSystems 工作了 35 年,期间见证了许多客户与我们共同成长。我们热忱地帮助客户取得成功——无论他们衡量成功的标准是什么——而成功的基石就是我们提供的技术。我们的名字现在通常与我们的 InterSystems IRIS 数据平台联系在一起,因为它实际上是我们经过验证的下一代数据管理软件。 在InterSystems IRIS 之前,我们以 Caché 和Ensemble 的强大功能而闻名,全球许多最重要的应用都是在它们的帮助下得以面世的。如果您也是我们的Caché 或 Ensemble 客户,这些平台如今无疑是您组织基础设施的重要组成部分,是一些优秀应用的基础。 然而,正如我们不断发展我们的技术,我们也希望帮助您发展现有技术,并使您能够利用最新的数据平台技术——即从人工智能(AI) 到云计算的各种最新技术。我们认为 InterSystems IRIS 的时代已来临,因此,我们将为所有现有的 Caché 和Ensemble 客户提供限时免费迁移到InterSystems IRIS 数据平台的机会。 我们理解,对业已成为您业务重要组成部分的现有解决方案进行任何更改,都将是一项艰巨的任务,但请相信我们,这一切都是值得的。我们的一面之词也许不足为信,但我们现有的许多客户已经做出了这样的转变,其中包括医疗软件公司Epic。 作为一个使用我们技术超过 40 年的忠实客户,Epic 去年决定迁移到InterSystems IRIS。其系统拥有 250 万并发用户,每秒处理大约 18 亿次数据库访问,因此,能够平稳迁移至关重要。通过我们的共同努力,迁移非常顺利。现在Epic 的客户体验到了更高的性能和更佳的可扩展性。 在此列举部分迁移到InterSystems IRIS 可拥有的优势: 更高的性能、可扩展性和资源效率 通过迁移,您将能够以小博大,用更少的资源做更多的事情,并同时管理多种不同类型的工作负载。为了让您更好地理解这一所指,我们通过速度测试(Speed Test)得出,与其他主流数据管理软件相比,InterSystems IRIS 在测试期间多摄取了 620.9% 的记录,在测试结束时多摄取了 717.3% 的记录。 开发人员生产力 InterSystemsIRIS 具有化繁为简的功能。您的开发人员可以在一个平台内构建和测试所有应用,现在使用嵌入式Python,您可以访问更大的开发资源池,以及数十万个可用的Python 库。从而让开发周期更短,控制和管理更简单。 云部署 作为一个“云中立”的平台,InterSystemsIRIS 不会将您与任何云供应商绑定。因此更加经济、高效和敏捷。 机器学习 我们的IntegratedML 功能为创建机器学习 (ML) 模型提供了一种简单的机制,让您更轻松地将 ML 模型实施到您的实时应用中。 Adaptive Analytics自适应分析 利用新的自适应分析 (Adaptive Analytics) 功能,您的组织无需依赖IT,即可更轻松地探索和分析数据。这意味着业务用户将能够获得他们所需的洞察力,从而做出明智的业务决策,并使您的 IT 团队专注于其他工作。 互操作性和 API 管理能力 通过迁移,您可以实时获得所有数据的统一视图。利用我们的数据平台,您可以连接不同的系统、技术和数据,为您的业务用户创建单一虚拟管理界面,或为您的企业应用创建实时连接。 轻松实现迁移 迁移到InterSystems IRIS 的理由,除了上述这些之外,还有很多。 如果您准备迁移到 InterSystems IRIS(已有数百个 Caché和 Ensemble 客户成功迁移),您可以登录www.intersystems.com/migrate了解更多关于如何迁移到 InterSystems IRIS 上的信息。 原文:Unleashing InterSystems IRIS: Why it’s time to migrate your Caché and Ensemble applications 关于作者 John Paladino负责InterSystems的支持、质量保证、内部计算机操作及客户教育工作。自1984年加入InterSystems以来,他帮助开发了自动化支持跟踪系统和针对所有InterSystems软件产品的客户培训项目,制定并实施了旨在改善响应性、提高客户满意度的服务标准,以及多个国内外团队建设计划。在加入InterSystems之前,他曾在New England Pathology担任了三年的系统工程经理,负责获取、实施和管理各类信息技术。Paladino曾在伍斯特理工学院和马萨诸塞大学卢维尔分校攻读电机工程专业。
公告
Michael Lei · 一月 10, 2023

InterSystems Package Manager 包管理器 0.5.2 发布

我们刚刚发布了包管理器的一个小更新,如我们11 月宣布,我们已经将 ZPM 重命名为 IPM。现在这个是一个错误修复版本,正确解释 ROBOCOPY 返回代码并修复阻止安装某些包的回归。 在这里获取: https://github.com/intersystems/ipm/releases/tag/v0.5.2
文章
Lele Yang · 二月 21, 2023

Linux Transparent HugePages 及其对 InterSystems IRIS 的影响

** 2018 年 2 月 12 日修订 虽然本文是关于 InterSystems IRIS 的,但它也适用于 Caché、Ensemble 和 HealthShare 发行版。 介绍 内存以页为单位进行管理。 Linux 系统上的默认页面大小为 4KB。 Red Hat Enterprise Linux 6、SUSE Linux Enterprise Server 11 和 Oracle Linux 6 引入了一种根据系统配置提供 2MB 或 1GB 大小的增加页面大小的方法,称为 HugePages。 起初 HugePages 需要在启动时分配,如果管理或计算不当可能会导致资源浪费。因此,各种 Linux 发行版引入了默认启用 2.6.38 内核的Transparent HugePages。这是一种自动创建、管理和使用 HugePages 的方法。以前的内核版本也可能具有此功能,但可能未标记为 [always] 而是设置为 [madvise]。 Transparent Huge Pages (THP) 是一种 Linux 内存管理系统,它通过使用更大的内存页面来减少在具有大量内存的机器上进行Translation Lookaside Buffer (TLB) 查找的开销。然而,在当前的 Linux 版本中,THP 只能映射单个进程的堆栈空间。 问题 任何 Caché 系统中的大部分内存分配都是共享内存段(全局和例程缓冲池),因为 THP 不处理这些共享内存段。因此,THP 不用于共享内存,而仅用于每个单独的进程。这可以使用一个简单的 shell 命令来确认。 以下是来自 InterSystems 的测试系统的示例,其中显示了分配给 Caché 进程的 2MB THP: # grep -e AnonHugePages /proc/*/smaps | awk '{ if($2>4) print $0} ' | awk -F "/" '{print $0; system("ps -fp " $3)} ' /proc/2945/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 2945 1 0 2015 ? 01:35:41 /usr/sbin/rsyslogd -n /proc/70937/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70937 70897 0 Jan27 pts/0 00:01:58 /bench/EJR/ycsb161b641/bin/cache WD /proc/70938/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70938 70897 0 Jan27 pts/0 00:00:00 /bench/EJR/ycsb161b641/bin/cache GC /proc/70939/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70939 70897 0 Jan27 pts/0 00:00:39 /bench/EJR/ycsb161b641/bin/cache JD /proc/70939/smaps:AnonHugePages: 4096 kB UID PID PPID C STIME TTY TIME CMD root 70939 70897 0 Jan27 pts/0 00:00:39 /bench/EJR/ycsb161b641/bin/cache JD /proc/70940/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70940 70897 0 Jan27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 1 /proc/70941/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70941 70897 0 Jan27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 2 /proc/70942/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70942 70897 0 Jan27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 3 /proc/70943/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70943 70897 0 Jan27 pts/0 00:00:33 /bench/EJR/ycsb161b641/bin/cache SWD 7 /proc/70944/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70944 70897 0 Jan27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 4 /proc/70945/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70945 70897 0 Jan27 pts/0 00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 5 /proc/70946/smaps:AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD root 70946 70897 0 Jan27 pts/0 00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 6 /proc/70947/smaps:AnonHugePages: 4096 kB 此外,运行时内存分配存在潜在的性能损失,尤其是对于具有高作业或进程创建率的应用程序。 建议 InterSystems 建议暂时禁用 THP,因为预期的性能提升不适用于 IRIS 共享内存段,并且可能会对某些应用程序产生负面性能影响。 通过运行以下命令检查您的 Linux 系统是否启用了 Transparent HugePages: 对于 Red Hat Enterprise Linux 内核: # cat /sys/kernel/mm/redhat_transparent_hugepage/enabled 对于其它内核: # cat /sys/kernel/mm/transparent_hugepage/enabled 上面的命令将显示是否启用了 [always]、[madvise] 或 [never] 标志。如果从内核中删除 THP,则 /sys/kernel/mm/redhat_transparent_hugepage 或 /sys/kernel/mm/redhat/transparent_hugepage 文件不存在。 要在引导期间禁用透明 HugePages,请执行以下步骤: 1. 将以下条目添加到 /etc/grub.conf 文件中的内核引导行: transparent_hugepage=never 2.重启操作系统 有一种方法也可以即时禁用 THP,但这可能无法提供所需的结果,因为该方法只会停止为新进程创建和使用 THP。已经创建的 THP 不会被反汇编成常规内存页。建议完全重新启动系统以在启动时禁用 THP。 *注意:建议与您各自的 Linux 经销商确认以确认用于禁用 THP 的方法。
公告
Michael Lei · 六月 8, 2023

InterSystems 测试管理器 - %UnitTest 框架的新 VS Code 扩展

如果您已经使用%UnitTest 框架构建了单元测试,或者正在考虑这样做,请查看InterSystems 测试管理器Test Manager。 无需离开 VS Code,您现在可以浏览单元测试、运行或调试它们,并查看之前的运行结果。 InterSystems 测试管理器适用于 ObjectScript 扩展支持的两种源代码位置范例。您的单元测试类可以在 VS Code 的本地文件系统(“客户端编辑”范例)或服务器命名空间(“服务器端编辑”)中掌握。在这两种情况下,实际测试运行都发生在服务器命名空间中。 欢迎反馈。
公告
Claire Zheng · 四月 22

InterSystems 编程大赛:Vector Search, GenAI 与 ML

Hi 开发者们, 我们非常高兴地邀请大家参加新的 InterSystems 在线编程竞赛,此次编程大赛关注生成式AI(GenAI), 矢量搜索(Vector Search )与机器学习(Machine Learning)! 🏆 InterSystems 编程大赛:Vector Search, GenAI 与 ML 🏆 时间:2024年4月22日 - 5月19日 (美国东部时间) 奖金池: $14,000 主题 使用InterSystems IRIS或InterSystems IRIS for Health或IRIS Cloud SQL开发任意使用生成式AI和/或机器学习的解决方案。 为了让此次竞赛变得更有趣,通过矢量搜索(Vector Search)开发的最具创新性的项目作者将被邀请参加InterSystems 2024 全球峰会*(最多3人)! *受邀开发者将获得全球峰会的免费门票和免费酒店住宿。 一般要求 应用程序或库必须功能齐全。该应用程序不应该是另一种语言中已有库的导入或直接接口(C++ 除外,您确实需要做大量工作来为 IRIS 创建接口)。不允许对现有应用程序或库进行复制粘贴。 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用程序应在 IRIS Community Edition 或 IRIS for Health Community Edition 上运行。两者都可作为host (Mac, Windows)版从Evaluation Site下载,或者可以按从InterSystems Container Registry或Community Container中提取的容器形式使用: intersystemsdc/iris-community:latest 或 intersystemsdc/irishealth-community:latest 。 该应用程序需开源并在GitHub上发布。 应用程序的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 一名开发者只允许提交 3 份作品。 注意:我们的专家将根据申请的复杂性和实用性标准对是否批准参加比赛拥有最终决定权。他们的决定是最终决定,不得上诉。 奖品 1. 专家提名奖(Experts Nomination)——获奖者由我们特别挑选的专家团选出: 🥇 第一名 - $5,000 🥈 第二名 - $3,000 🥉 第三名 - $1,500 🏅 第四名 - $750 🏅 第五名 - $500 🌟 第六名-第十名 - $100 2. 社区提名奖(Community Nomination)- 获得总票数最多的应用程序: 🥇 第一名 - $1,000 🥈 第二名 - $750 🥉 第三名 - $500 🏅 第四名 - $300 🏅 第五名 - $200 如果几位参与者获得相同数量的选票,他们都将被视为获胜者,奖金由获胜者分享。 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。 ✅ 还没有账号?点击此处创建一个账号! 👥开发人员可以组队创建协作应用程序。一个团队允许 2 到 5 名开发人员。 请注意,要在您的README文件中标注您的团队成员——社区用户profile。 重要截止日期: 🛠 应用程序开发和注册阶段: 2024年4月22日 (美国东部时间 00:00):比赛开始。 2024年5月12日(美国东部时间 23:59):提交截止日期。 ✅投票期限: 2024年5月13日(美国东部时间 00:00):投票开始。 2024年5月19日(美国东部时间 23:59):投票结束。 注意:在整个参赛期间(开发与投票期间),开发者可持续编辑、提升其应用。 资源助力: ✓ 文档 InterSystems IRIS Vector Search documentation InterSystems IntegratedML documentation Boosting Facial Recognition Vector Search ✓ 应用示例与资料: IRIS Vector Search llamaindex-iris langchain-iris workshop-vector-face IRIS FHIR SQL Builder DBT IntegratedML integratedml-demo-template integratedml-demo - Embedded Python demo suite iris-local-ml - Hugging Face and python usage with IRIS iris-fine-tune-ml - training and tuning ml models with python and InterSystems IRIS QuinielaML - soccer match predictions with IntegratedML workshop-integratedml-csv iris-rag-demo - RAG demo implementation ✓ 在线课程: Using Vector Search for Generative AI IntegratedML Interactive Intro Course Hands-on with IntegratedML ✓ 视频: Using Vector Search for Generative AI Adding AI into Interoperability Production Building Models with integratedML in the cloud Generative AI Use Cases in Healthcare ✓ IRIS初学者: Build a Server-Side Application with InterSystems IRIS Learning Path for beginners ✓ ObjectScript Package Manager (IPM) 初学者: How to Build, Test and Publish IPM Package with REST Application for InterSystems IRIS Package First Development Approach with InterSystems IRIS and IPM ✓ 如何将您的APP提交给大赛: 首先您需要发布应用:如何在 Open Exchange 上发布应用程序 然后,您可以提交申请:如何提交比赛申请 需要帮忙? 加入 InterSystems Discord 服务器上的竞赛频道或在本文评论中留言告诉我们。 期待您的精彩项目——加入我们的编码马拉松吧! ❗️参加本次比赛即表示您同意此处列出的比赛条款。请在继续之前仔细阅读它们。 ❗️
文章
Qiao Peng · 二月 6, 2021

InterSystems:技术支持和 DBMS 互操作性管理解决方案

在本文中,我们将讨论一个我每天都会使用的应用程序,当监控 InterSystems IRIS 平台上的应用程序和集成解决方案并查找所发生的错误时,我就会用到它。 在查找用来记录 InterSystems IRIS、Ensemble 和 Caché DBMS 中对象变化的解决方案时,我发现了一篇关于[使用宏进行日志记录](https://community.intersystems.com/post/logging-using-macros-intersystems-cach%C3%A9)的好文章。 受到该文章的启发,我对其介绍的项目进行了分叉,并做了相应调整以满足一些特定需求。 生成的解决方案以面板子类 %CSP.Util.Pane 的形式实现,它具有主命令窗口、“Run”(运行)按钮和已启用的命令配置。 该应用程序允许查看和编辑 global 数组、执行查询(包括 JDBC 和 ODBC)、通过电子邮件发送搜索结果(压缩的 XLS 文件)、查看和编辑对象,以及用几个简单图表来表示系统协议。 该 apptools-admin 应用程序基于 jQuery-UI、UiKit、chart.js 和 jsgrid.js。 欢迎查看[源代码](https://openexchange.intersystems.com/package/apptools-admin)。 ### 安装 仓库中详细介绍了所有安装方法。 但是,最简单的方法是使用包管理器命令: ``` zpm "install apptools-admin" [apptools-admin] Reload START [apptools-admin] Reload SUCCESS [apptools-admin] Module object refreshed. [apptools-admin] Validate START [apptools-admin] Validate SUCCESS [apptools-admin] Compile START [apptools-admin] Compile SUCCESS [apptools-admin] Activate START [apptools-admin] Configure START http://hp-msw:52773/apptools/apptools.core.LogInfo.cls http://hp-msw:52773/apptools/apptools.Tabs.PanelUikitPermissMatrx.cls?autoload=Matrix [apptools-admin] Configure SUCCESS [apptools-admin] Activate SUCCESS ``` 第一个建议链接必须在浏览器的地址字段中打开。 在加载的面板中输入 `?` ,然后按“Execute”(执行)按钮。 应用程序随后会显示命令示例。 ![](https://lh5.googleusercontent.com/Tsh6XG7TAcQJHcxWPFIWU8FK6rPFYhxzTvxtiKvjw_QAKxGicy_sJt0WhTcG8zBXNvkQzLlRQPTN4juAk8vOn3gyUXJREfgPs9rqUoM8) ### 命令 在面板中,您可以运行实用工具,查看和编辑 global,以及执行查询。 每次启动都保存在命名空间上下文的历史记录中,因此可以找到并重复。 在此上下文中,“启动”表示开始执行命令,命令表示我们在面板中输入的所有内容。 下面的屏幕截图显示了 global 数组 `^%apptools.History` 查看命令的示例 ![](https://lh4.googleusercontent.com/Viy-pXX3dVlNrfUX7SV4Alxb9pM3I-uDKAYgHRVJKP1hK9BuvkMIuP6oPfDNYrmJb-VTl8b12Fy61q63O-nH0FYG2u8zIeux2e-vvl1h) 如您所知,自动错误检测和通知可以由流行的解决方案(例如 Prometheus)处理。 但通常可以通过视觉评估错误的严重性。 我经常需要快速获取所有命名空间中的生产错误信息。 为此,我实现了一个实用工具: `##class(apptools.core.Production).FindAndDrawAllErr` 这会启动一个每日搜索请求,用于查找每个包含工作产品的命名空间中的错误,并允许通过快速转换到可视化跟踪来查看这些错误。 您可以在 apptools 面板中像运行其他任何程序一样运行此实用工具,只需加上 `xec` 前缀。 ![](https://lh3.googleusercontent.com/0olzck-lNvNLsCwBphoTWLwZdSZJrNpb3qbkul4WuuXD9NnMnwpXofCsay9FxVW8S4iWvZD7L3z-s5UrKpicBofeXUrHsAfeQrnkEU8C-fjXqcdV3dmVGBcZOtgnSuFxWAHI-2Dr) 所有有用命令都可以保存在作用域上下文的 global 扩展中,以便随时查找和重复。 ![](https://lh4.googleusercontent.com/qBRtuZL_gOFOZD92CQOr0-w-NH8PfpVhIpQZYZENmblg8_jpW-dN_pF7bKiPAcWjkE3Tew6pU0k0NsLelUE1KFcCd4Xhl3bF4SjNdtttUGqNq0_eW6GtTIiP9iBx7bjJ2UnAkrF8) ### Global apptools-admin 应用程序的很大一部分专门用于处理 global。 可以按倒序查看 global,还可以对链接和数据应用筛选。 显示的注释可以进行编辑或删除。 ![](https://lh4.googleusercontent.com/_FfwdGX_A11k4ue8vZ51_3qwuVvTJd8a0UgFqDPsRJICYuUGmcRMFjOxdG1sdHkLJR3Ea7m30BHSpx33wjDDCd5qVvN01ewWUefSfgNaTzA9Z9HK2iFdYmZZ9yLYuTlTSHFAGfqJ) 您可以在 global 名称后输入 `*` 通配符,以获得具有附加特征的 global 列表。 第二个 `*` 将添加一个新字段“Allocated MB”(已分配 MB)。 第三个将添加“Used MB”(已使用 MB)字段。 此语法解析为两个报告的结合,星号将通常较长的报告分成易管理的部分。 ![](https://lh6.googleusercontent.com/1osTx0tWcdQlteMHlFjIw3K6SEjH_3gO6EpTUEsfyPgR3_ns8LR3mMIPQGt31ToANPqx0fB_Fkjh6tc6WeUSwS9_8bYx5UgRjHnOkUF0o0izVz7dBB9eok2skmsCoWZbeB7gk_kY) 当您获取 global 列表形式的报告时(上面的屏幕截图中),可以点击活动链接来查看 global 本身。 还可以在管理门户中点击“`Permission`”(权限)字段中的 `R` 或 `W`,以标准方式查看和编辑 global。 通常,在调试项目时,对 global 的写操作用于记录变量和对象的状态。 为此,我使用特殊宏: `set $$$AppL("MSW","anyText")=$$$AppObJs(%request)` 在此示例中,`$$$AppL` 为一个带 `^log` 前缀的 glob 以及索引值中的日期和时间形成链接。 `$$$AppObJs` 是对象序列化宏。 ![](https://lh4.googleusercontent.com/AOTb2Axpzo_YlYNJacWM4k9RAdO0OmYlkYjnUtvEWM3Djc9VQL6NTuEo1mXR5m5K-PtHtsRVUXNwsd7lwkKjuicOvRCq5j2Mwx5P2eBN8lpyPiFacue4riVFkmakPidY5P5-Iyrw) 您可以在面板中查看协议 global,对象可以在窗口中以完全格式化的形式显示。 ### 查询 与 global 的使用几乎一样多的功能是查询。 通过输入命令形式的语句来运行此功能。 例如,可以执行一个 SQL 语句。 ![](https://lh3.googleusercontent.com/uPQs2IAuSpdORQXaxy_rlzSFmaB9RxKoiVWRGyLsG_tthobEpxU8uBunOxOTi695q9yDCHr0Xjez8IE-U8HKWKOzpvczDmmgaFrcmHfCpo6hMXsxJCP05LtdeohTiTrrooYuSRyh) 还可以将结果保存在 global `^mtempSQLGN` 中。 ![](https://lh4.googleusercontent.com/HE44MxizdxfluYQyuEvEs1k7vmSNganzvoxPWTGfYnjJwgYWD7u9fBlCmHUFT2LOPzfLp8vBC23yJyDDYvnMZU7gwIoJjKaVMhv5WQ8Da2-_F-NrNdjpcYyd4V0BakEiRCcrbejZ) 随后,global 中保存的结果可以显示在面板中。 ![[](https://lh3.googleusercontent.com/yJVXXpPBZMsT-eXI0FCaWs6f7YvWpMH4zBIKAv-ejtpCdAxqK8fSh3YEy_IbF-aPv9ijRLZXcgy026xLLEAS449CtVjzeKiv2coQa9eK7OmyIbCFOs7pLxJa7Trw525xO3DJFsMH) ### 将报告转换为 Excel 格式 标准管理门户缺少的一项功能是执行数据库 JDBC 或 ODBC 源中配置的查询,输出 XLS 格式的结果,然后将文件存档并通过电子邮件发送。 要在应用程序中实现此功能,只需在执行命令之前选中“Upload to Excel file”(上传到 Excel 文件)复选框。 这个功能为我的日常工作节省了很多时间,让我可以成功地将现成模块融入到新的应用程序和集成解决方案中。 ![](https://lh4.googleusercontent.com/LhyeRllHAL6q-rBiRNbCAgGOflKF8OZjomLMCjVapJ2qbvhouPS44dIHmbwt4I3-LmADhgaSNPg-u57am73bcdNGTH97rWtdL1FEmXHI5O9eQYyTBINjidT2H8TGIrXIc6kt4MnV) 要启用此功能,首先需要配置服务器上用于创建文件的路径、用户凭据以及邮件服务器。 为此,又需要编辑全局程序设置 `^%apptools.Setting` 的节点。 ![](https://lh4.googleusercontent.com/cTDe7pUN7bhHYiweuWbdL0bXsF98UoVCPsyLt84xlp-vCEH5edjvTgxiNfPIZbKRnCGpUk1m8mr0aPKHFMs0JdIDdwqS53wCF_997Z3KrRrBqv6jKCam0zlPkklC_YTxm8gRXhPb) ### 全局保存报告 通常,您需要将报告执行的结果保存到 global。 为此,可以使用以下程序: | | 函数 | | -------- | -------------------------------------- | | 对于 JDBC: | ##class(apptools.core.sys).SqlToDSN | | 对于 ODBC: | ##class(apptools.core.sys).SaveGateway | | 对于 SQL: | ##class(apptools.core.sys).SaveSQL | | 对于查询: | ##class(apptools.core.sys).SaveQuery | 例如,使用 `##class(apptools.core.sys).SaveQuery` 函数,将查询 `%SYSTEM.License:Counts` 的结果保存到 global `^mtempGN` 中。 ![](https://lh5.googleusercontent.com/VTwoteSkKE0MRg00CojD8HCpcK7CNAr8wAVldyVRp3dweYbXampTmhfAkwdIqGdj6H3zkJQ4_qdnCugQkkdpkga1hbXCghSHyZ5pIOufqwu5vcEv9YF3zdE__AwHaPN-5DeK2t9k) 然后可以使用以下命令在面板中显示已保存的内容: `result ^mtempGN("%SYSTEM.License:Counts", 0)` https://lh5.googleusercontent.com/KCIekwZw3guq79GWxVdHYdAbWQc4u97-dr-hWT26lYE2oEzUTSkwCE4ki1zvNqRFBg6dKQshSqcy3YSgUbjFKgX3v7Ecpa5Bm_NEQuZhP8Fn8p1gzrmAdTR-Cg9jBeVcNWGukW3a ### 增强功能模块 还有什么简化和自动化了我的工作? 就是让我能够在形成查询字符串时执行自定义模块的更改。 我可以将新功能即时嵌入到报告中,例如用于对数据执行其他操作的活动链接。 让我们看一些示例。 我们使用以下函数在浏览器中显示查询结果: `##class(apptools.core.LogInfoPane).DrawSQL` ![](https://lh3.googleusercontent.com/2s0tgxOgbOBLy-Pt1e8bx_gKJWNe5YQ6AWLRUCU02TcpTiUscKYeoBEce2qdzCGlbAPzIukRn5EuJ9jwu8eATPCH13zoR8A2fQoAWZfx3RpieD_8rACgikcCZpcIoAIofxlzv2mT) 让我们将字标记函数 `##class(apptools.core.LogInfo)`.MarkRed 添加到参数 5 中。 ![](https://lh6.googleusercontent.com/OyotzU3vmjoXw_MzA6amZbpPlpbL-li71OH5JRw7sAfiVoEsAvi8wSfY588kzdyXTURtGtinj0WvIKDhNLGyy50BD40E7NEQSpNv2Iv85lQisJaMBquvheuXVrMravp6OlNxkcqI) 同样,可以为输出补充其他功能,例如,活动链接或工具提示。 本解决方案中的 global 编辑器根据同样的原理实现。 以下是以表格形式输出 global 和查询的函数列表: | | 函数 | | ------------- | ----------------------------------------------------------------------------- | | 对于 global: | ##class(apptools.core.LogInfoPane).DrawArray("^mtempSQLGN") | | 对于 SQL: | ##class(apptools.core.LogInfoPane).DrawSQL("select * From %SYS.ProcessQuery") | | 对于查询: | ##class(apptools.core.LogInfoPane).DrawSQL("query %SYSTEM.License:Counts") | | 对于 global 结果: | ##class(apptools.core.LogInfoPane).DrawSQL("result ^mtempSQLGN") | 使用 apptools.core.Parameter 类 在安装了 apptools-admin 的实例的上下文中,此链接将在浏览器中打开 CSP 应用程序。 `http://localhost:52773/apptools/apptools.Form.Exp.cls?NSP=APP&SelClass=apptools.core.Parameter` 或在面板中选择活动链接。 ![](https://lh4.googleusercontent.com/dt3oFX7Aum3yuJ4lvOtmhUWqm55GyFPPRGbsW7phZWRAnnJkB5xE0CdD3ddFEnS0-5xzSD_ydNe2hXp8Eqk1R39aioTZunY7bymF4EkPfaukm86sfFb-YrQp5Mx_KOyU9sr9cGbR) 将加载 CSP 应用程序以编辑存储类的实例,在此示例中: `apptools.core.Parameter`。 ![](https://lh5.googleusercontent.com/OLXVridH04HDDbufXUp9kZ70h08ptXrRcvDRThemPEira4KANa2ECTVGUJm7nuc3crqAnerWcJMToyipqM4YZCcnwqWRVXbOFKN0ZakCvpqrpdMsQZ0yXtCBgUt8z2U_JOmKnSFF) ![](https://lh4.googleusercontent.com/8JO4JQRssC22LGhab6dZiG6PnD2NRYIQtYsY9zj-Z99IIHxVpekzsxfV3Pw04SgxEqto_JepTXcht6vBu17D834Z_7_Hh-Yr5GmXSOsI5axLf7vIHxUi-tmTwcJH9DFlomurpgCH) ### 通过表导航器创建 apptools.core.Parameter 在安装了 apptools-admin 的实例的上下文中,如果在浏览器中打开此链接: `http://localhost:52773/apptools/apptools.Form.Exp.cls?panel=AccordionExp&NSP=APP` 或在面板中选择活动链接。 ![](https://lh3.googleusercontent.com/5me2dJ5aItW6iixR4mBfVRMJHDZfXRnq_pkGrlmCtCTeKzsRx0MbopN0YcLdvEsoWs46Aqw_0fVJGk6L88AaFNWeajDgggpwYawRTbdUIhHRxWo7pFiv3dqj_JdO5wgmm_uZTL5_) 将加载 CSP 应用程序以导航存储类,并能够编辑它们。 ![](https://lh3.googleusercontent.com/TjtNmzFRS8fTOpsRU0XAXYCHYHNpenI9H1WsEPEtVz7bT2jhakKjsfdJ_inLXX-cBsu5PlKgSJjIS3VoHXD6dqzEm0PDrhy2eOPFT-BoHx6ToPB6Jio21lN1bloGk1xtdlRR7Gd-) ### 简单 CSP 应用程序的示例 在安装了 apptools-admin 的实例的上下文中,如果在浏览器中打开此链接: `http://localhost:52773/apptools/apptools.Tabs.PanelSample.cls` 或在面板中选择活动链接。 ![](https://lh3.googleusercontent.com/mqMOjz96bd2YmJdIQtdVYsZhYDFW73BMJtjQh2q1wzzKYrzE39kWGTd2-M0kpBQlxIT2bkv2V7o7ieIlyV7aU8XNF29oI3spIoLGJJAHOKppLrTVrrR2XwOJHAQgLXM3TEQPWGGj) 此示例还显示了编辑类实例 `apptools.core.Parameter` 的能力。 ![](https://lh4.googleusercontent.com/sFXN0QJJb1UuyNJPhykvDOJeOEWC3RrO7oV1dqYixKnPlgEDFJdBqj5bORhaXlftxvngbu-UdgCqvG2UEr7_hKUhjGtJk6jrDNgc43f7DwWCmuDnFubMuIcavHAh7Z1--R72Pf_Q) ### 图表 为了直观展示数据库的增长,应用程序提供了一个图表页面,显示每月测量的数据库大小。 该图表来源于 IRIS file.log(对于 Caché 则为 cconsole.log)中从当天向回“扩展”的记录。 程序会遍历协议,找到数据库扩展记录,并从当前数据库大小中减去增量的兆字节。 最终生成数据库增长的图表。 例如,下面的屏幕截图显示了 InterSystems IRIS 中通过协议文件形成的事件图。 ![](https://lh4.googleusercontent.com/EbO0ZVyJwj1EgKF9SR6BpKPyBERj3cNgK4ckrDrzVWVu35LUlQAINvsbArTJ946XQWBhDUzS_dm4m3ize-RM7EjyRLQkesaNvNQOvK8FuUGwKx_8gqYlCMvmC2Xy2ih0xgZKx_q-) 下面是另一个示例:系统中的事件时间表,基于系统协议 file.log (cconsole.log)。 ![](https://lh6.googleusercontent.com/s3Uz-F88rFnBWSCS5_m4vtCQL9kdS2dEL101oWtlfmmNpfjF1PgtPppI2GC1g3syXIr39X1dUBO0O-gC5mDXcT1k6xOkXrz19TeRqpRAWrNG_FL6kMoyAZqS2N7mIDjG2BKpPy_j) ### 总结 我们在本文中讨论的应用程序旨在帮助我执行日常任务。 它包括一组模块,您可以将它们用作自定义管理员工具的构建块。 如果您觉得它对您的工作有用,我会非常高兴。 欢迎将愿望和建议作为任务添加到项目[仓库](https://github.com/SergeyMi37/apptools-admin)。