清除过滤器
文章
Qiao Peng · 三月 5, 2021
InterSystems IRIS 元素周期表
PDF 版本:
GIT 源:
InterSystems IRIS 是一个具有许多功能的数据平台。 这些功能和相关的 IRIS 主题都体现在元素周期表中。
文章
Michael Lei · 五月 17, 2022
在这篇文章中,我们将使用docker和 参数配置文件模版 这一新特性来运行IRIS集群且轻松配置好。
在 UNIX® 和 Linux 上,您可以使用声明式参数配置合并文件来修改默认的 iris.cpf。合并文件是一个部分 CPF,在实例启动时为任何数量的参数设置所需的值。CPF 合并操作对每个实例只起一次作用。
我们的集群架构非常简单,它将由一个主节点(Node1)和两个数据节点(检查所有可用角色)组成。不幸的是,docker-compose不能部署到几个服务器上(尽管它可以部署到远程主机上),所以这对本地开发分片的数据模型、测试等很有用。如果是生产的InterSystems IRIS集群部署,你应该使用ICM云管理器或IKO K8S调度器。
Docker-compose.yml
我们从docker-compose 配置开始:
docker-compose.yml
version: '3.7'
services:
iris1:
image: containers.intersystems.com/intersystems/iris:2020.3.0.221.0
init: true
command: --key /ISC/iris.key
hostname: iris1
environment:
- ISC_DATA_DIRECTORY=/ISC/iris.sys.d/sys1
- ISC_CPF_MERGE_FILE=/ISC/CPF2merge-master-instance.conf
volumes:
- ./:/ISC:delegated
ports:
- 9011:1972
- 9012:52773
iris2:
image: containers.intersystems.com/intersystems/iris:2020.3.0.221.0
command: --key /ISC/iris.key --before 'sleep 60'
init: true
hostname: iris2
environment:
- ISC_DATA_DIRECTORY=/ISC/iris.sys.d/sys2
- ISC_CPF_MERGE_FILE=/ISC/CPF2merge-data-instance.conf
volumes:
- ./:/ISC:delegated
depends_on:
- iris1
ports:
- 9021:1972
- 9022:52773
iris3:
image: containers.intersystems.com/intersystems/iris:2020.3.0.221.0
command: --key /ISC/iris.key --before 'sleep 60'
init: true
hostname: iris3
environment:
- ISC_DATA_DIRECTORY=/ISC/iris.sys.d/sys3
- ISC_CPF_MERGE_FILE=/ISC/CPF2merge-data-instance.conf
volumes:
- ./:/ISC:delegated
depends_on:
- iris1
ports:
- 9031:1972
- 9032:52773
正如你所看到的,我们正在运行一个默认的intersystems/iris:2020.3.0.221.0镜像,提供License Key(必须支持Sharding),使用持久化的%SYS特性持久化数据,并提供ISC_CPF_MERGE_FILE,指向我们的合并文件(主节点和数据节点的文件不同)。此外,数据节点的启动晚了一分钟来让主节点先启动,这是个非常保守的估计,在一个正常的硬件上,启动时间最多几秒钟。
集群配置在CPF合并文件中,让我们来看看
Cluster configuration happens at CPF merge files, let's check them out
CPF2merge-data-instance.conf
[Startup]
PasswordHash=FBFE8593AEFA510C27FD184738D6E865A441DE98,u4ocm4qh
ShardRole=node1
[config]
MaxServerConn=64
MaxServers=64
globals=0,0,400,0,0,0
errlog=1000
routines=32
gmheap=256000
locksiz=1179648
发生了什么情况?
在[Startup] 部分,我们通过为我们的集群分配主节点角色来启用分片。在[config]中,我们将服务器扩大一些,允许更多的缓存和连接。就这么简单!
CPF2merge-data-instance.conf
[Startup]
ShardClusterURL=IRIS://iris1:1972/IRISCLUSTER
ShardRole=DATA
针对数据节点, 我们需要提供主节点和节点角色的URL.
试一下
试试这个repository 或者运行这段代码:
git clone https://github.com/intersystems-ru/iris-container-recipes.git
cd iris-container-recipes
cd cluster
// copy iris.key in cluster folder
docker-compose up -d
启动InterSystems IRIS集群后你可以从 浏览器 访问. 用户名/密码 is: _SYSTEM/SYS.
结论
合并CPF文件 是一个很好用而简单的工具来配置InterSystems IRIS的实例。
感谢@Luca.Ravazzolo提供的代码并回答了我所有的问题。
文章
Lucy Ma · 五月 18, 2022
什么是选择性构建?
选择性构建是InterSystems IRIS (2020.1及以后)商业智能的一个功能。选择性构建允许仅构建模型中的指定元素,并且保持模型可以正常使用。
选择性构建有哪些特性?
在了解选择性构建的细节之前,一个简单的汇总在介绍关于在构建一个标准模型的不同阶段是重要的。这里列出了标准模型构建的过程阶段:
1)删除模型中已存在的数据
2)增添模型需要的全量数据
3)构建所有的索引
现在我们已经熟悉一个标准模型构建的过程,我们可以理解选择性构建的优势。在标准构建过程中,模型必须被停用,因为第一步是需要删除掉所有的已存在数据,接着再增添全量数据。这种情况不会发生在选择性构建中。选择性构建仅仅选择指定的模型元素停用,然后更新相应的数据到这些元素中。这意味着已经存在的数据并不会被删除。既然已经存在数据不会被删除,模型则不需要被停用。那些被选择构建的元素会被停用,表示如果用户想要查询这些停用的元素,他们会看到报错信息。
选择性构建的使用场景?
选择性构建是一种很好的方式用于更新数据模型,而不需要将整个模型停用来延长构建时间。基于模型的大小,一个模型有可能需要几个小时甚至几天来做全量的构建。如此长的构建时间仅仅为了增加一条新的维度减弱了频繁更改模型的灵活性。
如何使用?
从UI界面
在架构中,任何更改的元素都会被自动追踪。当你试图从UI界面构建模型,弹出的对话框会提供一个选项叫做选择性构建。这个选项是默认的,无论任何模型中的元素被更改需要重新构建。当然,如果你更想构建全部模型,也可以在这个界面选择。
构建模型接口
在构建模型的接口中有一个新的参数。这个参数在文档中被描述为:“pFactList是一个特殊属性的列表,存在于模型的事实表类中。如果pFactList被设定,构建过程会仅仅更新在这个事实列表中的行。这个列表可以用逗号分割或者用 $LB的格式。这个特殊的事实表更新时会被单独标记不可用于被搜索,以及与其相关的维度也不可用,否则的话则会收到报错提示。”
我会建议使用UI界面来部署模型的更改,接口方式用于部署关于系统层面的变更。
学习更多关于选择性构建,请参考文档。
公告
Michael Lei · 四月 29, 2022
年度InterSystems IRIS开发者大赛来了,我们特别兴奋能够邀请大家参加我们今年的年度大奖赛,利用InterSystems IRIS数据平台创建开源解决方案!
🏆 InterSystems2022年度编程大奖赛 🏆
时间: 2021年5月9日 - 6月5日(美东时间)
总奖金超过$22,000美金,比去年提高37%!!!
主题
InterSystems 编程大奖赛是我们的年度编程大赛,旨在寻找使用InterSystems IRIS的最佳应用。 我们欢迎任何主题的申请!
提交任何使用InterSystems IRIS作为后端(API或数据库)的应用程序,以及任何类型的InterSystems IRIS API或数据模型。
我们欢迎您改进您去年在InterSystems竞赛系列中展示的应用程序,并提交给大奖赛。也欢迎您提交一个100%的新应用。
要求:
参赛作品申请:新加入Open Exchange的应用程序或现有的应用程序,但要有明显的改进。我们的团队将审核所有参赛申请后决定是否批准参赛.
该应用应在IRIS社区版或IRIS for Health社区版或IRIS高级分析社区版上运行.
该应用程序应是开源的,并在GitHub上发布
应用程序的README文件应该是英文的,包含安装步骤,并包含视频演示或/和应用程序如何工作的描述。
每位开发者最多可提交三个应用。
奖项设置(2022年总奖金比去年增长37.5%!!!):
1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出:
🥇 第一名- $7,000
🥈 第二名- $5,000
🥉 第三名- $3,000
🌟 第四到二十名- $100
2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用:
🥇 第一名- $3,000
🥈 第二名- $2,000
🥉 第三名- $1,000
✨ 所有获奖者都将授予Global Masters奖章!
如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金。
重要参赛时间安排
🛠 5月9日-29日(美东时间): 应用程序开发和注册阶段(在此期间,您可以持续编辑自己的项目)
✅ 5月30日(美东时间): 开启投票阶段(在此期间,您可以持续编辑自己的项目)
✅ 6月5日(美东时间): 投票截止
谁能参加?
除了InterSystems员工以外的所有社区成员. 快来加入吧!
开发者可以组队参加,每队2-5人。
不要忘记在您的应用程序的README中标明你的团队成员--开发者社区用户资料。
您可以使用的资源
✓ 如何使用 InterSystems IRIS (初学者):
Build a Server-Side Application with InterSystems IRIS
Learning Path for beginners
✓ 初学者如何使用 ObjectScript Package Manager (ZPM):
How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS
Package First Development Approach with InterSystems IRIS and ZPM
代码示例:
objectscript-docker-template
rest-api-contest-template
native-api-contest-template
integratedml-demo-template
PythonGateway-template
iris-fhir-template
iris-fullstack-template
iris-interoperability-template
iris-analytics-template
如何把您的APP提交给大赛:
如何在 InterSystems Open Exchange 上发布应用程序
如何把参赛APP提交给大赛
需要帮助吗?
欢迎在本帖下留言或联系您熟悉的InterSystems员工。
万分期待你的精彩项目!祝大家好运 👍
参加本次比赛,即表示您同意这里规定的比赛条款。请在进行比赛前仔细阅读这些条款。
公告
jieliang liu · 四月 18, 2022
各位开发者们好,
InterSystems IRIS 数据平台的最大特点之一是它允许您创建自己的自定义,您可以使用InterSystems IRIS 中支持的所有其他模型,例如对象和关系结构,而无需创建任何自定义结构。
⏯ InterSystems Globals与灵活的数据建模 Globals
请各位开发者关注我们的Bilibili 频道InterSystems Bilibili 主页!
文章
Qiao Peng · 四月 11, 2022
数据平台不仅要安全,还要合规,三级等保是我们要符合的主要安全规范。InterSystems的数据平台和集成平台产品都和三级等保有关。如果没有正确配置它们的安全选项,就会影响到整个系统的安全,影响到合规性。
在生产环境上,如何配置安全的InterSystems的数据平台,并达到三级等保的要求?
这个系列文章,针对InterSystems 数据平台的安全架构,围绕对三级等保的合规性展开,介绍如何配置出一个安全、合规的数据平台。
注:本文提到的InterSystems的数据平台,包括Caché数据库、Ensemble集成平台、HealthConnect医疗版集成平台和InterSystems IRIS数据平台。
三级等保的要求
三级等保要求
对数据平台的要求
身份鉴别
确保用户身份是真实、准确的
访问控制
控制:谁、以什么方式、从什么设备可以访问什么数据和功能?
入侵防范
防范静态数据、传输中的数据、日志和备份中的数据被入侵
恶意代码防范
防止恶意代码被植入和执行,例如SQL注入
可信验证
数据完整性
保证数据完整性和一致性的能力
数据备份恢复
对数据的备份与恢复能力和策略
InterSystems数据平台安全架构
InterSystems数据平台提供了一个完善的安全架构,用以保护从接入到数据保存的各个层面的数据安全:
InterSystems数据平台提供丰富的安全相关特性,用以保障系统安全性和合规性:
我们按数据的流向逐一展开,看看应该如何加强InterSystems数据平台的安全。
1. InterSystems数据平台连接通道安全
客户端可以使用多种技术连接到InterSystems数据平台,包括ODBC/JDBC、Java、.net、TCP、Telnet、HTTP、SOAP、REST等。除了客户端的连接,InterSystems数据平台之间也有很多连接通道,例如高可用镜像成员之间、数据平台和Web网关之间… 这些连接通道都应该考虑使用SSL/TLS进行通讯加密,从而保护数据的安全和一致性。
1.1配置InterSystems数据平台的超级服务器接入通道加密
除了通过HTTP、SOAP、REST之外的客户端,其它的客户端都连接到InterSystems数据平台的超级服务器。InterSystems数据平台在系统范围内使用SSL/TLS协议为超级服务器端口通道加密。
配置步骤如下:
在管理门户中,通过路径 系统 > 安全管理 > SSL/TLS 配置,建立名为%SuperServer的SSL/TLS配置项。参考文档
在管理门户中,通过路径 系统 > 安全管理 > SSL/TLS 配置,在超级服务器SSL/TLS支持 选项上选中“要求”。它的三个选项分别为:
禁用(默认选项)- 拒绝使用TLS的客户端连接
启用 - 允许使用TLS的客户端连接,但不必要
要求 – 仅接受使用TLS的客户端连接
如果Telnet也要通过TLS加密传输,将上面配置的基础上,再建立一个名为%TELNET/SSL的SSL/TLS配置项,然后将上图的Telnet server SSL/TLS support 设置为“要求”。具体配置
1.2 配置客户端使用SSL/TLS连接到InterSystems数据平台的超级服务器
不同的客户端技术配置SSL/TLS的方式不同,具体的配置详见:
Java
.net
ODBC/Studio/Windows Terminal
Windows配置
这里以ODBC为例,看看Windows客户端上ODBC设置的步骤:
1. 在Windows客户端上下载IRIS服务器上的CA证书文件,并保存在指定目录。例如:c:\InterSystems\certificates\certificateSQLaaS.pem
2. 在Windows客户端上编辑并保存C:\Program Files (x86)\Common Files\InterSystems\IRIS\SSLDefs.ini,其中[IRISServer]是你起的SSL/TLS配置名,后面的Address和Port是 InterSystems数据平台的服务器地址和超级服务器端口号。[TLSConfig]是SSL/TLS的配置项,注意其中的CAfile是第一步得到的CA证书文件路径。
[IRISServer]
Address=172.168.3.10
Port=1972
SSLConfig=TLSConfig
[TLSConfig]
TLSMinVersion=16
TLSMaxVersion=32
CipherList=ALL:!aNULL:!eNULL:!EXP:!SSLv2
Ciphersuites=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
KeyType=2
VerifyPeer=1
Password=
CAfile=c:\InterSystems\certificates\certificateSQLaaS.pem
3. 配置Windows的ODBC DSN,选中“Password with SSL/TLS", 并在“SSL/TLS Server Name”中填写SSLDefs.ini中特定的配置名,例如:IRISServer
之后ODBC客户端就可以使用这个DSN通过TLS加密传输连接到InterSystems数据平台了。
1.3 安全建议
虽然不是三级等保必须的,建议配置和开启InterSystems数据平台的超级服务器SSL/TLS连接。
2. Web服务器
InterSystems 数据平台在安装时,可以选择安装一个私有的Apache,用于访问管理门户和基于HTTP的开发、测试,例如网页应用、SOAP和RESTful API。
这个私有Apache并不是全功能的,因此不应作为生产环境的Web服务器,尤其是生产环境有基于HTTP的服务、应用或接口时。这时,应该部署独立的Web服务器和InterSystems Web网关,连接到InterSystems的数据平台。并且应该配置HTTPS,而非使用无加密的HTTP。
InterSystems的数据平台支持Apache、IIS和Nginx等Web服务器。
2.1 独立Web服务器的配置
如何配置独立的Web服务器和InterSystems Web网关,如何配置Web服务器的HTTPS?请参考这篇非常棒的社区系列文章:
WebGateway系列
2.2 安全建议
生产环境上,部署独立的Web服务器,而非使用InterSystems 数据平台的私有Web服务器。
Web服务器应使用HTTPS,而非HTTP,提供Web服务。
3. 服务与接口
InterSystems数据平台提供一系列服务和接口,用于各种外部系统和技术的接入,例如常见的ODBC/JDBC的SQL客户端、开发者使用的Studio、管理员常用的Telnet。另外,InterSystems数据平台组件和实例之间的连接也是通过服务实现的,例如Web网关和InterSystems数据平台之间的连接、配置为镜像高可用的多台InterSystems数据平台之间的连接。
3.1 InterSystems数据平台的服务
下表列出了InterSystems数据平台的服务和它们服务的对象:
服务名称
描述
%Service_Bindings
控制 SQL 或对象访问方式,包括Studio、XDBC客户端、Java、C++、ActiveX
%Service_CacheDirect
控制 Caché 直连访问方式
%Service_CallIn
控制使用CallIn的C/C++应用的访问
%Service_ComPort
控制从Windows系统COM端口的访问
%Service_Console
控制Windows本地服务器上 CTERM (TRM:pid) 和 Windows 控制台访问
%Service_Terminal
控制UNIX, Linux, Mac本地服务器上的控制台访问
%Service_DataCheck
控制实例间数据一致性检查DataCheck时,作为数据源的访问
%Service_DocDB
控制文档数据库的访问
%Service_ECP
控制是否ECP
%Service_Login
控制通过 SYSTEM.Security.Login的登录访问
%Service_Mirror
控制镜像成员访问
%Service_Monitor
控制 SNMP 和远程监视命令
%Service_Shadow
控制此系统是否可以是shadow来源
%Service_Sharding
控制是否可以作为分片服务器访问
%Service_Telnet
控制来自于Windows 服务器的本地或远程Telnet 会话访问
%Service_CSP
%Service_WebGateway
%Service_CSP(Caché/Ensemble)或%Service_WebGateway(IRIS)控制通过Web网关的访问,也就是web应用
%Service_Weblink
控制旧有的WebLink应用访问
3.2 InterSystems数据平台服务的安全选项
这些向外开放的服务和接口有多种机制保护安全:
是否启用
是否是公用服务(意味着所有用户都有权限)
身份认证的方式
接入客户端的IP限制
其它特殊限制
在管理门户>系统>安全管理>服务,可以对每一项服务进行单独的安全配置:
3.3 安全建议
关闭不必要的服务。
对开启的服务,应选择安全的认证方式,不应使用“未验证”方式。
进一步限定允许接入的客户端IP地址。
4. 用户认证
用户认证是保障数据安全的核心之一。
4.1 InterSystems数据平台的用户认证机制
InterSystems数据平台支持多种用户认证机制,包括:
Kerberos
基于操作系统的认证
IRIS用户名/密码
LDAP
代理认证 – 用户自定义认证
无认证 – 无需用户认证,进来的用户自动为UnknownUser
二阶段认证
它同时可以开启和使用多种用户认证,允许用户使用不同的认证方式接入数据平台。在启用多种用户认证机制时,InterSystems数据平台会以一定优先顺序来应用用户认证机制:
Kerberos > 基于操作系统的认证 > IRIS用户名/密码 >无认证
LDAP > 代理认证 >无认证
4.2 用户认证方式的设置
这些用户认证方式,可以在系统层面开启或禁用,也可以在服务/接口层面进行选择。对于InterSystems数据平台提供的Web应用,例如网页应用、SOAP服务和RESTful API,还可以在Web应用层面进行用户认证方式的配置。
系统层面的配置,在管理门户>系统>安全管理>Authentication/Web Session Options ;
服务层面的配置,见3.2;
应用层面的配置,将在后面的应用安全章节详细介绍。
4.3 安全建议
系统级禁用 “无认证”,和其它不需要使用的认证方式
系统级,采用更安全的认证方式
5. 用户授权
InterSystems数据平台提供一套基于角色的权限控制机制,它可以保障细颗粒度的数据与服务安全。
5.1基于角色的权限控制机制
在这套机制下,被保护的数据与服务被称之为资产。资产可以是任何具体事物,例如数据库、服务、平台应用、管理工具,甚至可以是抽象的事物,例如工作身份、“对患者联系方式的权限”。
权限控制机制是:
InterSystems数据平台定义资源,对应一个或多个资产;系统已经定义了一系列系统资源,同时用户可以自定义资源。
对资源的许可,例如读、写、使用,就是权限;
将权限分配给InterSystems数据平台定义的角色和/或用户;
用户就具有了相应的资产权限。
5.2资源的权限配置
通过管理门户>系统>安全管理>资源,管理可以创建新资源、配置已有资源的权限。
以%开头的资源是系统已经创建好的资源,例如:
%Admin_* 是工作身份资源
%DB_* 是数据库资源
%Service_* 是服务资源
%Ens_* 是互操作相关的资源
其中,对资源的权限可以被设置为“公有权限”,即所有用户都有相应的权限。
5.3 安全建议
用户自定义的数据库应该设置自己独立的资源,而非使用%DB_%DEFAULT
谨慎使用公共权限
创建自己需要保护的新资源
文章
Qiao Peng · 四月 11, 2022
6. 用户与角色
InterSystems 数据平台对用户和角色提供全面的管理和安全配置功能。加强数据平台的安全,需要加强对于用户和角色的管理。
6.1 用户管理
系统提供了一系列预置的用户账户,这些账户管理对应特殊的系统功能:
用户
说明
UnknownUser
匿名用户,通过“未验证”方式登录到系统的用户
_SYSTEM
SQL系统管理员
SuperUser
超级用户
Administrator
安装系统的用户
Admin
系统管理员
CSPSystem
Web网关管理员
IAM
IAM用户
_PUBLIC
内部使用
_Ensemble
内部使用
6.1.1 系统级用户安全配置
InterSystems数据平台有一些系统级别的用户安全配置,例如密码模式、密码有效天数、无效登录限制(多少次登录失败后要禁用用户账户)、非活动限制(多少天未登录后禁用用户账户)等。这些系统级配置通过管理门户>系统>安全管理>系统范围的安全参数:
三级等保对于用户的密码强度是有要求的。弱密码只需要0.19毫秒就能被破解,而8位强密码破解需要上百年。密码强度可以通过上面配置页面的密码模式或密码验证routine来配置:
密码模式只能配置简单的密码强度约束逻辑,例如3.32ANP意思是允许3位到32位长度到密码,密码可以由字符、数字和符号组成。
密码验证routine可以配置任意复杂的密码强度约束逻辑,它通过用户自定义的密码检查逻辑进行判断。例如要求“密码必须是包括数字、大写字母和半角符号的8位以上的字符串”,可以在%SYS命名空间下编写一个routine,里面提供密码验证逻辑的方法。方法名由自己决定,它有两个固定的参数Username和Password,您只要实现密码约束逻辑:如果符合约束,返回$$$OK,否则返回相应的错误提示即可。
这里给出一个routine示例,这个%SYS下的routine名为IRISPWD,里面的CHECK方法用于判断密码合规性,它利用正则表达式判断密码是否符合“必须是包括数字、大写字母和半角符号的8位以上的字符串”的约束,违反约束时给出提示错误。
#include %occInclude
CHECK(Username,Password) PUBLIC {
s tValid=(Password?8.E)&&(Password?.E1.U.E)&&(Password?.E1.N.E)&&(Password?.E1.P.E)
q:(tValid=0) $$$ERROR($$$GeneralError,"密码需要是包括数字、大写字母和半角符号的8位以上的字符串")
q $$$OK
}
然后将方法调用的名称更新到“系统范围的安全参数”中的密码验证routine中。方法调用名称是方法名^Routine名,本示例为CHECK^IRISPWD。
设置好后即可生效,但要注意它不会对旧有密码进行验证。当设置或修改用户密码后保存时,它会进行检查,对违反约束的密码设置,会报如下错误提示:
6.1.2用户管理
通过管理门户>系统>安全管理>用户,可以创建、管理用户。在这里可以执行每个用户的初始密码设置、账户启用/禁用条件,用户的角色设置、SQL权限等管理。
另外,也可以查看用户的概要信息,它会显示用户的权限列表、登录历史等信息:
注意:
CSPSystem用户是CSP网关登录到InterSystms IRIS/Cache'的用户。如果需要修改它的密码,需要先在IRIS/Cache'用户管理页面修改CSPSystem的密码,然后再登录到CSP网关上修改CSP网关连接IRIS服务器的账户信息,保持二者密码一致。1. 登陆到私有Apache的CSP网关或独立安装的Web服务器的CSP网关,访问http://<IP+端口>/csp/bin/Systems/Module.cxw
2. 修改CSP网关连接IRIS服务器的账户信息:
2.1 Configuration>Default Parameters>Security>User Name 和Password2.2 Configuration>Server Access>Connection Security>User Name 和Password
6.2 角色管理
InterSystems数据平台预置了一些%开头的系统角色,例如%Developer开发者角色、%Manager系统管理员角色、%Operator系统操作员角色。
其中%All是一个特殊角色,它是超级用户角色,属于这个角色下的用户都是超级用户。因此属于这个角色的用户数量不宜过多,当然也不建议少于2个,以避免密码遗失造成无法管理系统而只能进入紧急模式。
6.3 安全建议
1.仅管理员有%All角色,尤其要确保UnknownUser没有%All角色
2.删除不需要的系统角色和系统用户
3.要求用户账号更安全的密码模式
4.设置密码错误数次后停用账号
7. 数据安全
InterSystems数据平台提供了丰富的数据安全特性,包括数据与数据库加密、数据访问控制机制。这里相当多的特性都是三级等保要求的。
7.1 数据加密
InterSystems数据平台内建多种加密算法,包括AES CBC (128, 192, 256位)、HMAC、MD5、SHA-1、SHA-512、PKCS、PBKDF2、Base64等。同时,它可以直接调用外部的Python、Java和.net算法库,实现包括国密SM算法在内的算法扩展。
它支持对全数据库加密,或仅对数据元素加密。
7.1.1 全数据库加密
全数据加密时,InterSystems数据平台使用AES加密算法,自动负责数据库数据的加解密。加密的数据库在加载时,需要向系统提供密钥。通常密钥保存在可移除的设备上,例如U盘,仅在加密数据库加载时使用,加载后就可以移除并保存在安全的地方。
InterSystems数据平台的数据库和命名空间架构让用户可以将需要加密保护的数据,例如患者基本信息数据和支付数据单独保存在一个较小的数据库中。
在全数据库加密的情况下,可以对日志、审计日志都进行加密,从而避免任何的数据泄密渠道。这样,即便数据库文件、日志文件和审计日志被盗走,没有密钥文件都无法解密数据。
创建一个新密钥文件及新的加密数据库的过程非常简单,在管理门户即可完成:
产生密钥文件。只有管理员才有权限产生密钥文件。
输入密钥文件产生路径、管理员账户、密钥文件管理密码、AES加密位数,保存时会产生用于加密的密钥文件。
注意,产生的密钥文件的管理是需要权限的 – 只有密钥管理员才可以激活该密钥文件并使用它进行数据库加密。在密钥文件产生后,尽快加入多个可以管理该密钥的管理员,并为他们设置不同的密钥密码,以避免一个密钥管理员账户失效。
密钥文件产生后,你就可以将其拷贝到安全的位置,并将原始产生的文件删除。如果你有多个密钥,应记住密钥ID (如下图的0535458F-A895-4915-BADF-2C257602880D)和密钥文件、密码的关系。
激活密钥文件
在InterSystems数据平台实例上激活密钥,才能使用它进行数据库加解密。只有密钥管理员,使用密钥文件的密码才能激活密钥。
每个实例可以激活多个密钥,因为你可能有使用不同密钥加密后的数据库文件。可以设置某个密钥为默认密钥,新产生的加密数据库会使用默认密钥加密;同时可以设置某个密钥文件为默认的Journal日志密钥,新的Journal日志会使用默认Journal密钥加密。
这里还可以设置密钥使用的方式:“交互”或“无人参与”。 “无人参与”需要将密钥文件保存在一个InterSystems数据平台启动时可以访问到的固定路径上,因此不推荐使用。“交互”方式下,InterSystems数据平台会在启动和加载加密数据库时向管理员询问密钥位置,因此更加安全。
创建加密的数据库:
在数据库创建过程中,选择加密数据库。这样InterSystems数据平台会使用当前默认的密钥进行加密。
现在你就有了一个加密的数据库了,里面的任何数据都是被加密的。即便数据库文件被copy走,只要没有密钥文件,这个数据库就无法被加载或解密其中的数据。
在今后的InterSystems数据库平台的启动过程中,都将要求输入加密密钥文件的完整路径、密钥管理员账户和密钥文件密码:
如果要对之前未加密的数据库加密、或者将加密数据库重新部署为不加密的数据库、或者为加密数据库更换加密密钥,这些操作需要通过^EncryptionKey 管理工具完成,而不能在管理门户中完成。参见文档
7.1.2 数据元素加密
除了全数据库加密,用户也可以选择通过代码控制仅对特定数据元素加密,因此它可以控制非常细颗粒度的加密策略。
InterSystems数据平台提供系统类%SYSTEM.Encryption,里面有密钥创建和管理、加密解密的方法。用户开发的程序可以使用这些方法进行密钥管理和加解密工作。
如何使用的文档在这里。
7.2 数据访问控制
InterSystems数据平台提供多个层面的数据访问控制机制。包括:
数据库层面的访问权限控制,即数据库读、写权限控制
SQL层面的访问权限控制,包括
SQL操作的权限,例如创建表和视图的权限
对表、视图级别的访问权限
对存储过程的执行权限
行级安全 – 例如每个医生只能看自己的出诊记录
列级安全 – 例如医生角色可以看到患者表中除了患者支付卡号列之外的其它数据
这些数据访问控制机制可以自由组合,满足严格的数据访问控制。
7.3 安全建议
对敏感数据进行全数据库加密,并保存好密钥文件和密钥文件密码
合理的数据读写权限
必要时,添加行级和列级安全
公告
Claire Zheng · 四月 11, 2022
Hi开发者们,
我们非常高兴地向大家宣布此次 InterSystems Globals开发者竞赛的获奖者!
第19届编程大赛的优胜者名单如下:
专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出:
🥇 第一名,奖金 $4,000 获奖项目 global-mindmap 开发者 @Yuri.Gomes
🥈 第二名,奖金 $2,000 获奖项目 globals-tool 开发者 @Dmitry.Maslennikov
🥉 第三名,奖金 $1,000 获奖项目 iris-globals-graphDB 开发者 @Muhammad.Waseem
更多获奖者:
🏅 奖金$100 ,获奖项目 python-globals-serializer-example 开发者 @José.Pereira
🏅 奖金$100 ,获奖项目 global-archiver 开发者 @Lorenzo.Scalese
🏅 奖金$100 ,获奖项目 blockchain - [ IRIS python ] 开发者 @davimassaru.teixeiramuta
🏅 奖金$100 ,获奖项目 Globals: Embedded Python vs. ObjectScript 开发者 @Robert.Cemper1003
🏅 奖金$100 ,获奖项目 zpm-generate-ui 开发者 @MikhailenkoSergey
🏅 奖金$100 ,获奖项目 GlobalToJSON-XL-Academic 开发者 @Robert.Cemper1003
🏅 奖金$100 ,获奖项目 Cubes 开发者 @Sean.Connelly
🏅 奖金$100 ,获奖项目 GlobalToJSON-Efficient 开发者 @Robert.Cemper1003
🏅 奖金$100 ,获奖项目 iris-globals-contest 开发者 @Oliver.Wilms
🏅 奖金$100 ,获奖项目 GlobalToJSON-Compact 开发者 @Robert.Cemper1003
🏅 奖金$100 ,获奖项目 global-name-search 开发者 @Jailton.Viçôzo
🏅 奖金$100 ,获奖项目 React-UI-Global 开发者 @Evgeniy.Potapov
社区提名奖(Community Nomination)- 获得总投票数最多的应用:
🥇 第一名,奖金 $1,000 ,获奖项目 globals-tool 开发者 @Dmitry.Maslennikov
🥈 第二名,奖金 $750 ,获奖项目 python-globals-serializer-example 开发者 @José.Pereira
🥉 第三名,奖金 $500 ,获奖项目 iris-globals-graphDB 开发者 @Muhammad.Waseem
恭喜所有优胜者!
感谢大家对本次比赛的关注和付出,是你们的付出让这次大赛熠熠生辉!ღ( ´・ᴗ・` )比心🙌
接下来呢?
如果没有获奖,也不要灰心气馁!要知道,失败是成功之母,坚持下去就能成功 (^-^)V
准备好,期待五月的大赛吧! 😎
文章
Qiao Peng · 四月 14, 2022
8. 应用安全
InterSystems数据平台上可能运行着多种应用,例如Web网页应用、SOAP服务、REST API、HL7 接口、SQL服务等等。这些应用种类繁多,面临的安全风险也是巨大的,例如代码注入攻击和HTTP的跨站请求伪造攻击等。
这其中代码注入攻击和针对Web应用的攻击尤其需要重视。
8.1 代码注入攻击
代码注入攻击通常和我们编写的程序相关,需要在程序编写时注意避免。
8.1.1 SQL注入攻击
SQL注入攻击是典型的代码注入攻击,通过从外部注入恶意SQL语句获得数据权限并获得敏感数据。关系型访问方式都是通过客户端SQL语句传入执行的,因此它是数据库重点需要防范的。
InterSystems数据平台并不支持以分号分割的多条SQL语句作为一个SQL命令执行,因此它本身免疫了主要的SQL注入攻击手段。
InterSystems数据平台支持动态SQL,即允许SQL命令作为方法的字符串参数传入,这会给SQL注入攻击留有隐患。在编程时,应避免开放服务用于接受完整的SQL语句作为参数,而是通过SQL动态传参来构建运行时SQL。
InterSystems数据平台支持行级安全,这有助于避免在SQL注入攻击时,将所有数据返回给攻击请求。
8.1.2 $ZF
InterSystems数据平台提供了系统函数$ZF,用以调用外部命令。其中$ZF(-1)和$ZF(-2)用以调用服务器操作系统的命令。这可能会成为代码攻击的隐患。
在使用$ZF开发服务时,应避免把完整的操作系统命令作为字符串参数传入来执行,而应仅传入必要的数据,由服务器端方法来组成需要执行的操作系统命令,避免注入攻击。
8.2 Web应用安全管理
InterSystems数据平台提供多种Web应用,都是基于HTTP/HTTPS协议的,例如InterSystems数据平台的管理门户网页、用户自定义的网页、开放的SOAP服务、RESTful API。
既然走HTTP/HTTPS,所以首先应该部署专用Web服务器,并配置HTTPS来提供这些Web服务,在传输通道上保障安全。
除了传输通道,要得到更安全的生产环境,还有其它的安全设置需要检查和配置。
8.2.1 CSP/ZEN用户自定义网页应用
每个InterSystems数据平台等命名空间默认都有一个Web应用,可以通过它提供用户自定义网页应用。也可以创建一个新的Web应用提供用户自定义的网页应用。
第一个要检查的项目,是要看看这些默认创建的Web应用是否需要。如果不需要,应该禁用 – 取消选中“Enable Application”。
第二个要检查的项目,是这个Web应用使用的身份认证方式。在生产环境上,不应该使用“未验证”方式,所以应该取消选中该选项。
第三个要设置合适的“必要的资源”,它是对网页应用的资源权限要求。必须具有该资源的使用权限的用户,才能访问该网页应用。
第四个要决定是否开启防CSRF攻击,建议开启“Prevent Login CSRF attack”。
8.2.2管理门户
InterSystems数据平台的管理门户就是CSP/ZEN开发的网页应用,它具有大部分系统管理和监控能力,例如安全配置、高可用配置等。
除了8.2.1提到的对网页应用的安全配置项目之外,InterSystems数据平台预置了一系列系统角色和系统资源,用于让不同用户对管理门户的不同功能页面具有不同的权限。例如操作员角色(%Operator)不具有创建、修改用户的权限。
这些用户权限检查是通过配置给管理页面的系统资源来判断的,只有对这些页面系统资源有权限的用户才能访问该管理页面。
为了提供更细颗粒度的管理,除了配置给管理门户页面上的系统资源,用户可以将自定义资源加到管理门户页面上。这样,用户需要同时具有系统定义的页面资源权限和用户自定义资源权限才能访问和使用管理页面。
如何查看系统预置的管理页面资源和配置自定义资源?在每个管理门户页面菜单项上,都有链接,点击它就可以查看该管理页面分配的系统资源和自定义资源。如果要添加自定义资源,点击“分配”,就可以在弹出的页面中进行配置。
通过配置自定义资源,可以实现任意颗粒度的管理门户权限控制。
如果您在管理互操作产品,想了解系统提供的预定义安全资源,可以参考文档
8.2.3 SOAP服务
除了SQL服务,SOAP服务是InterSystems数据平台经常要开放的服务类型之一。如果您的生产环境上开放了SOAP服务,应该检查它的安全配置。
开启SOAP服务
InterSystems数据平台的SOAP服务也是通过Web应用开放的。默认情况下,Web应用是没有开放“入站Web服务”的,也就是说默认Web应用是不能提供SOAP服务的。如果需要开放SOAP服务,需要选中对应Web应用的“入站Web服务”。
注意:如何仅是查看WSDL,并不需要开启此选项。
开启SOAP服务测试页功能
InterSystems数据平台还提供SOAP服务测试页功能,该功能可以使用Web页面来测试SOAP服务,而不需要通过SOAPUI等工具。
为了安全,默认SOAP服务测试页功能是未开启的。如果需要开启,需要通过系统安全设置项开启:
SET ^SYS("Security","CSP","AllowPrefix",<SOAP应用路径>,"%SOAP.")=1
注意:
1. <SOAP应用路径>最后需要加"/",例如 "/csp/user/"
2. 该设置项不影响SOAP服务,仅影响测试页
SOAP认证与权限
在生产环境上,不应该发布无需认证的SOAP服务。因此也需要取消选中“未验证”方式。
同时通过“必要的资源”设置,可以为SOAP服务指定需要的权限。
SOAP安全协议
另外,SOAP本身有很多安全协议,例如WS-Security, WS-Policy, WS-SecureConversation, WS-ReliableMessaging... 它们提供SOAP消息头及消息体加密、数字签名等机制保障SOAP服务安全。
InterSystems数据平台支持这些SOAP安全协议,可以通过这些协议加强SOAP服务的安全。
8.2.4 RESTful API
RESTful API越来越多的用于轻量化的服务提供。与SOAP服务类似,InterSystems数据平台的RESTful API也是通过Web应用提供的。
因此上面介绍的Web服务的安全检查项也适用于RESTful API应用。
另外,如果部署了InterSystems API管理器,它本身也提供了安全相关的功能,例如用户认证、权限控制等。因此也要检查InterSystems API管理器的安全设置。
8.3 安全建议
不要拼接SQL语句,而是通过传参数构建运行时的SQL
避免使用动态SQL
启用行级安全
将$ZF调用封装在方法中,避免将操作系统命令通过字符串传入
部署独立的Web服务器,并启用HTTPS
禁用"未验证"的身份验证方式
选择"密码"或"Kerberos"
开启防跨站请求伪造(CSRF) 攻击
增加必要的资源权限要求
对"应用程序角色"配置合适的角色
为SOAP服务建立独立的Web应用,不使用命名空间默认的Web应用发布SOAP服务
不应该发布不需要用户认证的SOAP服务和RESTful API!
使用合适的认证策略,例如密码或用户名令牌
使用合适的SOAP安全协议,例如消息加密、数字签名
在部署了InterSystems API管理器时,通过它进一步约束安全选项
9. 安全审计
InterSystems数据平台提供审计能力,提供防篡改的审计数据库,用于记录审计事件。审计数据可以查看、搜索和导出。
通过管理门户 > 系统 > 安全管理 > 审计 可以开启和配置审计。
InterSystems数据平台预置了一系列系统审计事件,例如用户登录事件、登录失败事件等。并非所有的预置系统审计都默认开启,用户可以在系统审计事件配置页面进行配置,决定审计哪些系统事件。
除了系统预置的审计事件,InterSystems数据平台运行用户自定义审计事件,例如谁修改了特定的类。通过管理门户 > 系统 > 安全管理 > 用户定义的审计事件 可以创建自定义审计。
9.1 安全建议
开启审计
对重要的用户级事件建立自定义审计事件
定期分析审计的用户行为模型,识别发现异常请求
10. 备份与恢复
数据平台的备份与恢复是保障数据安全的另一项机制。定期的备份保障在意外发生时数据可以最大限度的恢复。例如是误删除了数据和代码,InterSystems数据平台的镜像高可用也无法恢复这些误删除的内容,因为误删除也会在备机上重做。这时,备份是唯一可以恢复误删除数据的希望。
所以应该有备份恢复的自动化策略,定期地执行备份,并将备份保存在与生产环境隔离的地点妥善保存。
InterSystems数据平台支持多种备份工具和备份策略。
备份工具:
冷备份 – 卸载数据库,拷贝数据库文件,加载数据库。冷备份需要计划宕机时间
联机热备份 – InterSystems数据平台提供的在线备份,无需计划宕机时间。数据规模很大时,备份时间较长
外部备份(快照备份) – 在线备份,无需计划宕机时间。通常速度很快,但需要外部备份工具
InterSystems数据平台使用内建的联机热备份工具时,支持这些备份策略:
全备份 – 备份全部数据
增量备份 – 备份上次备份之后修改的所有数据
补充备份 - 备份上次全备份之后修改的所有数据
可以使用这些备份方式,组合成一个自动的备份计划,例如:周日执行全备份、周一周二执行增量备份、周三执行补充备份、周四周五周六执行增量备份。
这些备份文件和备份之后的所有日志文件(Journal文件)和数据平台配置文件,以及项目相关的静态文件一起,例如网页文件,才是完整的生产环境备份集。完整的备份集才能保证恢复到指定的时间节点上。
有了备份并不是万无一失,需要验证备份是否可用。应该建立备份集恢复测试的环境,定期对备份集进行恢复测试,以确保备份集是可用的。
10.1 安全建议
建立自动的备份任务
备份应保存在独立的存储和隔离的物理位置
定期检查备份集的可用性
11. 正确安装InterSystems数据平台
在InterSystems数据平台安装时,会提示选择安全级别。因此在安装时,就应该选择正确的安全级别,避免后期大量的安全配置检查和调整。
InterSystems数据平台安装时会提供3个安全级别选择:Minimal、Normal和Locked Down。
Minimal:是针对于本机开发环境安装的安全级别、也是最低的安全级别,通常是被用于开发者在自己的笔记本电脑上安装InterSystems数据平台的开发实例。它几乎没有安全限制,例如允许无认证登录、匿名用户拥有%All的权限。因此绝不应该在生产环境上以此级别安装。如果您已经以Minimal安全级别安装了生产环境,那应该立刻修改安全配置。
Normal:是针对通常用途的安全级别,收紧了安全策略,可以作为大多数生产环境的初始安全配置。建议生产环境安装时,以此级别进行安装,并在安装之后按需调整安全配置。
Locked Down:是针对高安全需求的生产环境的安全级别。它禁用了多数服务、收紧了服务策略,因此安装后就已经提供了一个较为安全的实例。
Minimal
Normal
Locked Down
安全设置
密码模式
3.32ANP
3.32ANP
8.32ANP
不活动禁用天数*
0
90天
90天
启用_SYSTEM用户
是
是
否
分配给用户UnknownUser的角色
%All
无
无
服务策略
Use 权限为公共权限
是
是
否
需要认证
否
是
是
服务
%Service_Bindings
启用
启用
禁用
%Service_CacheDirect
启用
禁用
禁用
%Service_CallIn
启用
禁用
禁用
%Service_ComPort
禁用
禁用
禁用
%Service_Console*
启用
启用
启用
%Service_ECP
禁用
禁用
禁用
%Service_Monitor
禁用
禁用
禁用
%Service_Telnet*
禁用
禁用
禁用
%Service_Terminal†
启用
启用
启用
%Service_WebGateway
启用
启用
启用
12. InterSystems 数据平台的安全建议工具
InterSystems数据平台提供安全检查和建议工具。通过管理门户 >系统 > 安全管理 > 安全顾问 即可使用该工具。
安全建议工具会提示安全建议,点击“详细信息”链接,会自动跳到对应安全配置页面。在生产环境上线前,建议使用该工具进行检查。
13. InterSystems 数据平台三级等保检查清单
针对三级等保合规,检查清单如下:
1. 配置基于TLS的数据加密通道**
所有对InterSystems 数据平台的连接方式都配置使用加密通道
2. 部署独立的Web服务器
配置Web服务器应用HTTPS,并禁用不安全的 HTTP 方法
3. 服务配置
关闭不必要的服务
对必要开启的服务,选择安全的认证方式
禁用“未验证”方式
进一步限定允许接入的IP地址
4. 加强认证
系统级禁用 “无认证”
选用更安全的认证方式
5. 收紧授权**
数据库应该设置自己独立的资源,而非使用%DB_%DEFAULT
谨慎使用公共权限
创建自己需要保护的新资源**
6. 用户与角色
仅管理员有%All角色
要求用户账号更安全的密码模式
设置密码错误数次后停用账号
7. 数据安全
对敏感数据进行全数据库加密
合理的数据读写权限
必要时,添加行级和列级安全**
8. 应用安全
不要拼接SQL语句,而是通过传参数构建运行时的SQL**
避免使用动态SQL**
启用行级安全**
将$ZF调用封装在方法中,避免将操作系统命令通过字符串传入**
禁用不必要的Web应用 **
对Web应用,禁用"未验证"的身份验证方式
对Web应用,开启防跨站请求伪造(CSRF) 攻击
对Web应用,对"应用程序角色"配置合适的角色,不应随意赋予%All **
为SOAP服务建立独立的Web应用,不使用命名空间默认的Web应用发布SOAP服务 **
不应该发布不需要用户认证的SOAP服务和REST API!
使用合适的SOAP安全策略,例如消息加密、数字签名
9. 审计
开启审计
对重要的用户级事件建立自定义审计事件 **
定期分析审计的用户行为模型,识别发现异常请求 **
10. 备份与恢复
建立自动的备份任务
备份应保存在独立的存储和隔离的物理位置
定期检查备份集的可用性
注:**项目不是三级等保的必查项,但建议进行检查和配置。
文章
姚 鑫 · 六月 8, 2021
# 第一章 InterSystems XML工具简介
介绍了如何使用 IRIS `XML`工具。
InterSystems IRIS为`XML`处理带来了对象的力量--可以使用对象作为`XML`文档的直接表示,反之亦然。由于InterSystems IRIS包括本机对象数据库,因此可以将此类对象直接用于数据库。此外,InterSystems IRIS提供了用于处理`XML`文档和`DOM`(文档对象模型)的工具,即使它们与任何InterSystems IRIS类无关。
# 用XML表示对象数据
有些InterSystems IRIS `XML`工具主要用于支持`XML`的类。要为类启用`XML`,需要将`%XML.Adaptor`添加到其超类列表中。`%XML.Adaptor`类使能够将该类的实例表示为XML文档。可以添加类参数和属性参数来微调投影。
![image](/sites/default/files/inline/images/1_48.png)
对于启用了`XML`的类,数据可以采用以下所有形式:
- 包含在类实例中。根据类的不同,还可以将数据保存到磁盘,在磁盘中数据可以像其他持久类一样以所有相同的方式使用。
- 包含在`XML`文档中,可以是文件、流或其他文档。
- 包含在`DOM`(文档对象模型)中。
下图概述了用于在这些表单之间转换数据的工具:
![image](/sites/default/files/inline/images/2_28.png)
`%XML.Writer`类使能够创建`XML`文档。输出目的地通常是文件或流。确定要包括在输出中的对象,系统根据在类定义中建立的规则生成输出。
`%XML.Reader`类使能够将合适的`XML`文档导入到类实例中。源通常是文件或流。要使用此类,需要指定类名和`XML`文档中包含的元素之间的关联。给定的元素必须具有相应类所需的结构。然后您逐个节点地阅读文档。这样做时,系统会创建该类的内存中实例,其中包含在`XML`文档中找到的数据。
`DOM`也是处理`XML`文档的有用方法。可以使用`%XML.Reader`类读取`XML`文档并创建表示它的`DOM`。在此表示中,`DOM`是一系列节点,可以根据需要在它们之间导航。具体地说,将创建`%XML.Document`的一个实例,该实例表示文档本身并包含节点。然后使用`%XML.Node`检查和操作节点。如果需要,可以使用`%XML.Writer`重新编写XML文档。
InterSystems IRIS `XML`工具提供了许多方法来访问和修改`XML`文档和`DOM`中的数据。
# 创建任意XML
还可以使用InterSystems IRIS `XML`工具创建和使用任意XML-即不映射到任何InterSystems IRIS类的`XML`。要创建任意XML文档,请使用`%XML.Writer`。该类提供了用于添加元素、添加属性、添加命名空间声明等的方法。
要创建任意DOM,请使用`%XML.Document`。该类提供了一个类方法,该方法返回具有单个空节点的DOM。然后根据需要使用该类的实例方法添加节点。
或者使用`%XML.Reader`读取任意XML文档,然后从该文档创建DOM。
# 访问数据
InterSystems IRIS `XML`工具提供了几种访问XML格式数据的方法。下图显示了摘要:
![image](/sites/default/files/inline/images/3_23.png)
对于任何格式良好的XML文档,都可以使用以下类来处理该文档中的数据:
- `%XML.TextReader`-可以使用它逐个节点地读取和解析文档。
- `%XML.XPATH.Document`-可以使用它来获取数据,方法是使用引用文档中特定节点的`XPath`表达式。
在InterSystems IRIS中,DOM是`%XML.Document`的实例。该实例表示文档本身并包含节点。可以使用该类的属性和方法从`DOM`中检索值。可以使用`%XML.Node`检查和操作节点。
# 修改XML
InterSystems IRIS XML工具还提供了修改`XML`格式数据的方法。下图显示了摘要:
![image](/sites/default/files/inline/images/4_17.png)
对于`XML`文档,可以使用`%XML.XSLT.Transformer`中的类方法执行`XSLT`转换并获得文档的修改版本。
对于DOM,可以使用`%XML.Document`的方法修改`DOM`。例如,可以添加或删除元素或属性。
# SAX解析器
InterSystems IRIS XML工具使用InterSystems IRIS SAX(Simple API For XML)解析器。这是一个内置的SAX XML验证解析器,使用标准`Xerces`库。`SAX`是一个解析引擎,它提供完整的XML验证和文档解析。InterSystems IRIS SAX使用高性能的进程内调入机制与InterSystems IRIS进程通信。使用此解析器,可以使用内置的InterSystems IRIS XML支持或通过在InterSystems IRIS中提供您自己的自定义`SAX`接口类来处理`XML`文档。
对于特殊应用程序,可以创建自定义实体解析器和内容处理程序。
可以使用行业标准的`XMLDTD`或模式验证来验证任何传入的`XML`,并且可以指定要解析的XML项。
# 其他XML工具
InterSystems IRIS `XML`支持包括以下附加工具:
- XML架构向导读取XML架构文档,并生成一组支持XML的类,这些类与架构中定义的类型相对应。可以指定一个包来包含类,以及控制类定义详细信息的各种选项。
- `%XML.Schema`类使能够从一组启用了XML的类生成XML架构。
- `%XML.Namespaces`类使能够检查XML命名空间以及其中的类,以查找InterSystems IRIS命名空间。
- `%XML.Security.EncryptedData`类和其他类使能够加密XML文档以及解密加密文档。
- `%XML.Security.Signature`类和其他类使能够对XML文档进行数字签名,以及验证数字签名。
# 使用XML工具时的注意事项
在使用任何类型的XML工具时,至少有三个一般要点需要考虑:
- 任何XML文档都有字符编码
- 将XML文档映射到类(文字或`SOAP`编码)有不同的方法
- 应该知道SAX解析器的默认行为
# 输入输出的字符编码
导出XML文档时,可以指定要使用的字符编码;否则,InterSystems IRIS会根据目标选择编码:
- **如果输出目标是文件或二进制流,则默认值为`“UTF-8”`**。
- 如果输出目标是字符串或字符流,则默认`为"UTF-16"`。
对于InterSystems IRIS读取的任何`XML`文档,文档的XML声明应该指示该文件的字符编码,并且文档应该按照声明的方式进行编码。例如:
```
```
但是,如果文档中未声明字符编码,InterSystems IRIS将假定:
- 如果输出目标是文件或二进制流,则默认值为`“UTF-8”`。
- 如果输出目标是字符串或字符流,则默认为`"UTF-16"`。
# 选择文档格式
使用`XML`文档时,必须知道将文档映射到InterSystems IRIS类时要使用的格式。同样,在创建`XML`文档时,需要指定编写文档时要使用的文档格式。`XML`文档格式如下:
- 文字表示文档是对象实例的文字副本。在大多数情况下,即使在使用`SOAP`时,也使用文字格式。除非另有说明,否则文档中的示例均使用文字格式。
- 编码的意思是按照`SOAP 1.1`标准或`SOAP 1.2`标准中描述的编码。`SOAP1.1`和`SOAP1.2`的细节略有不同。
以下小节显示了这些文档格式之间的差异。
## 文字格式
```java
Klingman,Julie G.
1946-07-21
W897
Bensonhurst
60302
Jung,Kirsten K.
Xiang,Charles R.
Frith,Terry R.
```
## 编码格式
相比之下,下面的示例以编码格式显示相同的数据:
```java
...
Jung,Kirsten K.
...
Quixote,Umberto D.
...
Chadwick,Mark L.
...
Klingman,Julie G.
1946-07-21
W897
Bensonhurst
60302
...
```
请注意编码版本中的以下差异:
- 输出的根元素包括`SOAP`编码命名空间和其他标准命名空间的声明。
- 本文档包括同一级别的人员、地址和医生元素。`Address`和`Doctor`元素列出了引用它们的`Person`元素使用的唯一`ID`。每个对象值属性都是这样处理的。
- 顶级`Address`和`Doctor`元素的名称与各自类的名称相同,而不是与引用它们的属性名称相同。
- 编码格式不包括任何属性。`GroupID`属性被映射为`Person`类中的属性。在文字格式中,此属性被投影为特性。但是,在编码版本中,属性被投影为元素。
- 对集合的处理方式不同。例如,列表元素具有属性`ENC:arrayType`.。
- 每个元素都有一个`xsi:type`属性的值。
注意:对于`SOAP1.2`,编码版本略有不同。要轻松区分版本,请检查SOAP编码命名空间的声明:
- 对于`SOAP1.1,SOAP`编码命名空间为`"http://schemas.xmlsoap.org/soap/encoding/"`
- 对于`SOAP1.2,SOAP`编码命名空间为`"http://schemas.xmlsoap.org/wsdl/soap12/"`
除非解析器可以使用这些其他模式,否则验证将失败。特别是对于WSDL文档,有时需要下载所有模式并编辑主模式以使用正确的位置。
它尝试解析所有实体,包括所有外部实体。(其他XML解析器也会这样做。)。这一过程可能很耗时,具体取决于它们所在的位置。具体地说,`Xerces `使用网络访问器来解析一些URL,并且实现使用阻塞I/O。因此,不会超时,网络获取可能会在错误条件下挂起,这在实践中很少见。
此外,`Xerces`不支持`https`;也就是说,它不能解析位于`https`位置的实体。
如果需要,可以创建自定义实体解析器,也可以禁用实体解析;
# IRIS支持的标准
IRIS XML支持遵循以下标准:
- XML 1.0 (https://www.w3.org/TR/REC-xml/)
- Namespaces in XML 1.0 (https://www.w3.org/TR/REC-xml-names/)
- XML Schema 1.0 (https://www.w3.org/TR/xmlschema-0/, https://www.w3.org/TR/xmlschema-1/, https://www.w3.org/TR/xmlschema-2/)
- XPath 1.0 as specified by https://www.w3.org/TR/xpath
- SOAP 1.1标准第5节指定的SOAP 1.1编码。
- SOAP1.2编码,如第3节第2部分: Adjuncts (https://www.w3.org/TR/soap12-part2/) of the SOAP 1.2 standard.
- XML Canonicalization Version 1.0 (also known as inclusive canonicalization), as specified by https://www.w3.org/TR/xml-c14n.
- XML Exclusive Canonicalization Version 1.0 as specified by https://www.w3.org/TR/xml-exc-c14n/, including the InclusiveNamespaces PrefixList feature (https://www.w3.org/TR/xml-exc-c14n/#def-InclusiveNamespaces-PrefixList)
- XML Encryption (https://www.w3.org/TR/xmlenc-core/)
InterSystems IRIS支持使用RSA-OAEP或RSA-1.5进行密钥加密,并支持使用AES-128、AES-192或AES-256对邮件正文进行数据加密。
- XML Signature using Exclusive XML Canonicalization and RSA SHA-1 (https://www.w3.org/TR/xmldsig-core/)
InterSystems IRIS提供两个XSLT处理器:
- Xalan处理器支持XSLT 1.0。
- Saxon处理器支持XSLT 2.0。
**注意:InterSystems IRIS不支持在一个元素中有多个名称相同的属性,每个属性位于不同的名称空间中。**
公告
Claire Zheng · 一月 28, 2022
亲爱的社区开发者们,大家好!
欢迎积极参与新一轮InterSystems开发者竞赛!
这次我们聚集Python!
🏆 InterSystems Python竞赛🏆
竞赛时间: 2022年2月7日 - 27日
奖金总额: $10000 - 更多获奖机会!
奖品
1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出:
🥇 第一名 - $4,000
🥈 第二名 - $2,000
🥉 第三名 - $1,000
🌟 第四名-第十五名 - $100
2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用:
🥇 第一名 - $1,000
🥈 第二名 - $750
🥉 第三名 - $500
如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖
谁可以参加?
任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个!
👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。
请注意,要在您的README文件中标注您的团队成员——社区用户profile
参赛时间安排
🛠 2月7日 - 20日: 应用开发、提交阶段。
✅ 2月21日 - 27日: 投票阶段。
注意:在整个参赛期间(开发与投票期间),开发者可持续编辑、提升其应用
主题
最新 发布 的 InterSystems IRIS 2021.2版本提供了 Embedded Python 功能,而且将 PEX 扩展到 Python. 我们邀请您在一个新的编程竞赛中使用嵌入式Python ! 也欢迎使用Python原生API或Python PEX的应用程序。
提交一个开源的应用程序,通过InterSystems IRIS或InterSystems IRIS for Health(医疗版)使用嵌入式Python或原生Python API或Python PEX。
一般要求
有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。
该应用可以在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition上运行。
该应用需开源并在GitHub上发布。
该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。
资源助力
1. 通过InterSystems IRIS开发Python应用:
Learning Path Writing Python Application with InterSystems
Embedded Python Documentation
Native API for Python Documentation
PEX Documentation
2. ObjectScript Package Manager (ZPM)初学者:
How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS
Package First Development Approach with InterSystems IRIS and ZPM
3. 如何将您的APP提交给大赛:
How to publish an application on Open Exchange
How to submit an application for the contest
4. 项目示例
interoperability-python
pex-demo
python-examples
WebSocket
AOC2021
Python Faker
5. 视频
Introduction to Embedded Python
Embedded Python: Bring the Python Ecosystem to Your ObjectScript App
Embedded Python for ObjectScript Developers: Working with Python and ObjectScript Side-By-Side
Embedded Python with Interoperability
InterSystems IRIS Native Python API in AWS Lambda
参赛评比
投票规则即将发布,敬请期待!
So!
期待您的精彩提交– 加入我们的编程马拉松,赢取大奖!
❗️ Please check out the Official Contest Terms here.❗️
文章
Nicky Zhu · 八月 10, 2022
InterSystems 数据平台的互操作功能与久经考验的Ensemble和HealthConnect集成引擎产品一脉相承。事实上,使用IRIS的典型客户不但应用了IRIS提供的多模型数据存储、分布式存储等数据存储特性,也广泛地应用如可视化数据转换,可视化数据流程编辑和可视化规则引擎等一系列互操作能力构建异构系统间或组织机构间的数据流程。
那么,在生产环境上,如何监控与评估数据流程的运行状况,在发生问题时如何快速定位并解决故障,就是用户的运维团队需要考虑的问题。
本系列文章将围绕IRIS互操作功能中核心的互操作消息管理,Production管理与优化及互操作告警与通知三个方面介绍互操作功能的运维基础知识和常用技巧,希望能够帮助客户平稳、高效地运用数据平台。
注:本文提到的InterSystems数据平台,包括Caché数据库、Ensemble集成平台、HealthConnect医疗版集成平台和InterSystems IRIS数据平台。
互操作消息管理
消息是互操作功能中各组件间通信的基本方法,在互操作Production业务服务、业务流程和业务操作之间广泛使用。
除承担信息传递的基本功能外,由于常常需要在生产环境中查看消息内容或重发消息以解决问题,消息检索就是大家最常用到的功能,而IRIS特有的结构化消息存储也为开发和运维团队使用和管理消息创造了便利。用户能够通过消息的内容,某项具体属性,来源/目标和发生时间等条件检索和过滤消息,迅速找到自己感兴趣的信息。
我们先回顾下消息的结构与关联的上下文。
消息结构
如图所示,消息分为消息头与消息体两部分。其中消息头(标头)主要用于记录消息发生的来源、趣向、时间和消息类型等上下文信息,而消息体(正文)则为消息的具体内容。
而在消息的上下文中,会话是一个比较重要的概念,它用于表达一次交互过程中,从初始的输入所触发的所有消息。在使用时,需要注意:
Message Trace将显示一个会话的所有信息
消息查看器默认只列出会话开始的信息(绿色消息)
消息检索
下图即为平台自带的消息查看器,可通过Ensemble > 查看 > 消息导航访问(Ensemble菜单项在IRIS和HealthConnect产品中的名称为Interoperability,位置,含义均相同,下文中将不再赘述)。
可见其中包含若干预制条件及可灵活扩展的查询条件以应对不同场景的需求。
需要注意的是,对检索所需的消息体或头属性建立索引很重要。因为在生产环境中,production中的消息存量可以轻易达到百万、千万甚至亿级,对于海量数据不经过索引进行检索就性能而言不可行。
应用SQL检索消息
如果需要,也可以使用SQL语句进行搜索
系统资源管理器SQL执行查询。
在运行前切换到正确的命名空间。
可以参考消息查看器使用的SQL语句来修改
在Terminal中,在执行搜索的命名空间中运行以下代码。
Set ^Ens.Debug("UtilEnsMessages", "sql")=1
在消息查看器中执行搜索
根据需要从消息查看器复制、修改和执行SQL。
需要SQL知识
用户可直接运用平台提供的SQL示例检索消息,这样的SQL也为用户学习和掌握IRIS持久话消息的结构和辅助函数等概念提供了基础。
用户在熟悉消息结构,并了解SQL的条件下,配合Search Table、索引等特性,可以实现更复杂的基于消息内容的查询。
其中,关于Search Table的应用,用户也可参考我们的另一篇文章《互操作消息统一管理系列:SearchTable加速检索》。此处不再赘述。
异常消息的处理
重发消息
借助消息的持久化,当通信异常导致消息传递失败时,用户也可通过重发消息重新触发业务
挂起消息
如果业务组件运行错误,可能会挂起消息
手动停止消息
队列查看页 > 选择业务组件 > 挂起按钮
组件配置页 > 作业 > 挂起按钮
挂起后消息保持静止,等待手工处理
用户也可有针对性地查看和处理被挂起的消息。
查看挂起消息
Ensemble > 查看 > 已挂起的消息
重发已挂起消息
从已挂起消息页重发将发送被挂起的这条消息
从消息查看器重发将复制并发送一条新的消息
中断消息
IRIS的业务组件有自动重发消息的能力。但但运维团队明确远端故障已发生,短期内重发消息没有意义时,也可下达指令丢弃消息,不再进行后续处理。
业务组件处于重试状态时
组件配置页 > 作业 > 放弃按钮
Ensemble > 监视器 > 队列 > 点击业务组件 > 选择活动的消息 > Abort 或 Abort All 按钮
中断被堆积的消息
Ensemble > 监视器 > 队列 > 点击业务组件 > 选择排队的消息 > Abort 或 Abort All 按钮
文章
Nicky Zhu · 八月 10, 2022
Production是开发者基于InterSystems IRIS产品家族实现互操作功能的主要技术架构。而每个Production的运行依赖于三类主要的业务组件:
业务服务(Business Service)
业务流程(Business Process)
业务操作(Business Operation)
三类组件间以消息作为信息交换的主要媒介。因此,要保障互操作业务的稳定运行,除保障软件平台有充足的软硬件资源运行外,保障Production中消息的高效传输以及三类组件的平稳、高效运行则是运维团队面临的主要目标。下面列举的若干项任务则有助于运维团队实现这些目标:
优化业务组件运行效率
Production中的业务组件都有运行池的概念,允许业务组件运行在多个进程上并发工作以提高整体性能。运行池又可以分为私有池和参与者池两类。
私有运行池
业务组件的CPU作业的数量
默认为1即可工作
通过性能测试确定最佳的池大小
拥有私有池的业务组件从私有队列中处理消息
无适配器业务服务的池大小需设置为0
需要多进程时,池大小设为1可以保证信息以先进先出(FIFO)顺序处理
整个消息流中的所有业务组件的池大小都不应大于1
参与者池
Production级的参与者池设置
用于处理公共队列中的请求的CPU作业的数量
由使用公共队列的所有业务流程共享。
业务流程和业务操作的池大小设置。
0 - 使用参与者池和公共队列
非0--使用私人队列,有指定的CPU作业数
对于FIFO,设置池大小=1
参与者池与业务流程的启停
任何一个池大小为0(仅使用公有池)的业务流程被禁用时,所有的参与者都不会启动
防止任何池大小为0的业务组件从公共队列中处理消息
要保障其他参与者正常工作
将要被禁用的组件的Pool Size改为大于0并应用
如果已经禁用,要启动其他参与者
保持组件禁用,但将其Pool Size为大于0并应用
Production的运行维护
Production本身具备一系列的运行状态管理功能,帮助运维团队在生产环境上处理Production运行的一系列任务,包括
Production运行维护 – 自动启动
Ensemble > 管理 自动启动Production > 选择要自动启动的Production
在Ensemble启动时自动启动Production
如果需要的话,会自动调用RecoverProduction()方法,恢复Production状态
系统级启用开关
系统管理 > 配置 > 其他设置 > 启动 > EnsembleAutoStart
默认情况下为 "真"。
在排除故障时,可能需要禁用。
Production运行维护 – 强制关闭
如果Production关闭得太慢
等待关闭超时
显示强制关闭按钮
Production运行维护 – 更新
运行的组件与它的底层类代码不同步,需要Production来更新
业务组件进程因错误而意外关闭,需要重新启动
设置的改变需要业务组件重新启动
更新按钮出现在Production配置页面。
Production运行维护 – 恢复
在非正常关机和一些错误之后出现
如果需要,自动启动Production将在启动前自动恢复
Production运行维护 – 中断
在配置页面上显示
Production被关闭时如果满足如下条件之一:
有同步消息在等待响应。
或者,队列非空,意味着Production还没处理完消息
或者,消息仍在被组件处理
或者,有级别较高的告警请求
Production中断后的选项
重新启动Production以完成消息的处理
如果启动后消息仍然被组件不断重试(提示故障未排除)
修复导致重试的问题
挂起消息
中断消息
在测试系统中(决不能是生产系统),如果你决定必须完全清除所有队列,请调用Ens.Director类的CleanProduction()方法
do ##class(Ens.Director).CleanProduction()
Production的配置
Production本身是基于InterSystems的大量预制组件经开发或直接部署产生的软件包,因此将包含大量不需要在代码中固定写好的配置项,例如远程连接的地址,扫描数据表使用的SQL等。运维团队的工作之一,就是在外部环境发生变化,例如第三方系统部署地址发生变化时,通过调整Production的设置来应对变化,而无需更改已部署的代码。
凭据
用于登录远程系统。
在出站适配器的凭据设置中指定
在Ensemble > 配置 > 凭据中设置
Production配置数据的来源
导出Production
配置页 > Production设置 > 操作选项卡 > 导出
创建与类/部件相关的XML文件
验证是否需要额外的类
可用于
部署到另一个实例中
部署到另一个命名空间
保存Production
部署Production
Ensemble à 管理 à 部署变化 à 部署
会创建回滚文件及部署日志
导出与部署的当前限制
除业务组件外,组件配置、规则、DT等组件运行依赖的部件不会自动被识别,需要人工选取并导出
DSN, 凭据等含安全信息的配置不会被导出(实例级配置,非Production级配置),需要手动在部署端配置。产品化研发中需要考虑通过自定义任务定期同步到备机或其他实例。
清除Production数据
当Production在生产中运行较长时间后,往往会累积大量的告警,事件日志和互操作消息等运行数据。用户可选择定期删除一部分不再需要的数据,保证磁盘空间的充裕。
直接执行
Ensemble > 管理 > 清除管理数据
直接执行清除任务受限于浏览器进程超时设置,如在清除过程中触发超时,将导致清除进程失效退出,中断消息清除过程。
对于大量消息累积的场景,请使用后台任务周期性执行确保清除效果。由于删除数据时也将产生大量的journal,删除前应在journal所在存储上保留充裕的空间。
后台任务
系统操作 > 任务管理器 > 新任务
空闲超时设置
组件被标记为不活动,如果
组件在给定的#秒内没有活动
黄色表示不活动的组件
Production监控
配置页面
Production运行监控
IRIS平台为用户提供了一系列工具展现组件的运行状态。运维团队需要频繁地使用这些工具用于定位和诊断故障,识别性能瓶颈等。
Production监视器
一页式监控业务服务、业务操作、队列和错误。
点击单个组件了解详情
提供对队列和事件日志的访问
事件日志
检索、过滤和清除日志
联合使用事件日志和可视化追踪
错误、警报和警告事件日志条目显示在可视化追踪中
点击图标可以查看事件日志详情
业务规则日志
Ensemble > 查看 > 业务规则日志
每次尝试匹配规则时的条目
空原因表示没有匹配的规则
日志内容
I/O 记录
组件配置
除了Production信息外,还对输入和输出数据进行存档
TCP输入输出
文件输入输出
输入和输出数据显示在可视化跟踪窗口中
组件状态指示器
状态指示器提供业务组件健康状况的可视化
绿色 – 正常
黄色 – 不活动(项目空闲时间超过其空闲超时设置)
红色 - 错误。
灰色 - 禁用。
暗绿色或暗灰色 -- Production目前没有运行
紫色 - 遇到失败但在重试的信息
消息队列
要查看队列
Ensemble > 监视器 > 队列 > 在队列中点击消息查看详情
Production配置页 > 选择组件 > 队列Tab
组件在给定的#秒内没有活动
可以查看、挂起和中断整个队列的消息处理
消息队列与性能调优
消息队列的变化常常可以用于评估组件性能及识别性能瓶颈,运维团队可以根据瓶颈所在位置和上下游组件队列的变化情况调整Pool Size获得优化性能。
忽然暴增的队列
如果发生在业务操作
通常由外部系统导致
连接中断
暴增的业务高峰
如果发生在业务流程
业务流程可能出现错误,导致它以某种方式 "卡住”
长期堆积的队列
如果发生在业务操作
可能是在向外部应用程序发送消息时出现持续延迟
看看外部系统的性能问题是否能得到解决。
如果不能,考虑增加池子的大小设置(除非需要FIFO)
如果发生在业务流程
考虑增加池(私有池或参与者池)大小的设置(除非需要FIFO)
可能有算法缺陷,考虑优化
多个队列长期堆积
潜在的原因
主机容量不够(内存/CPU/IO)
Ensemble需要更多的资源(内存、CPU)
底层的Caché实例可能需要调整(内存、IO)
永远不要低估低速存储的影响
作业
提供关于CPU作业运行配置项的信息
Job # = 操作系统进程ID
状态
Dequeuing - 等待信息被处理(最常看到的)
Running - 工作,重试或无限循环
Quiescent - 生产关闭期间的状态
Error
能够按照日程周期运行的作业非常适合用于执行系统运维任务
周期性清除过期Production数据
按照备份策略周期性执行全量、累积和增量备份
定期清除过期的数据库journal
定期对数据库进行一执行检查
定期对数据库执行压缩截断释放空间(慎用)
定期将无法通过mirror同步的配置推送到备机(例如DSN、凭据等)
活动量监控
活动量和持续时间监视器显示每个接口的统计数据
Ensemble > 监视器 > 活动量和持续时间。
按时间段过滤(分钟、小时、天、周、月、年)
可以根据需要建立自己的仪表盘来显示所需数据
也可通过SQL查询
启用活动量收集
将Ens.Activity.Operation.Local Business Operation添加到Production中
为统计数据指定存储命名空间
为Production启用统计数据收集
do ##class(Ens.Util.Statistics).EnableStatsForProduction()
为命名空间的Web应用程序启用DeepSee
系统管理 > 安全 > 应用程序 > Web应用程序
使用PurgeActivityData任务进行清理。
使用作业控制周期任务
文章
Nicky Zhu · 八月 10, 2022
在互操作功能运行过程中,IRIS可以识别异常情况的发生,自动生成告警事件并通过预制的互操作组件将告警转发给干系人;另外,IRIS也内建了告警工作台,可供运维团队基于工作流实现对告警的管理。
告警设置与转发
Production告警设置
在Production级别可以设置对连接异常的告警设置,及告警组件设置
组件告警设置
控制何时触发警报。
队列计数警报。
队列中的信息数量
队列等待警报。
消息在队列中停留的秒数
不活动超时。
业务组件不活动的秒数
在v2012.1之前,不会触发告警
警报宽限期
与外部连接有关的错误可以有宽限期设置
设置重新建立连接的时间,超时且连接不成功才会发出告警
业务服务
警报宽限期
业务操作
再次发出警报宽限期
转发告警
EnsLib.EMail.AlertOperation
内置告警转发组件
通过Email转发
路由到其他接口转发
REST - 短信
REST - 钉钉
用户需要执行的规划
什么样的告警需要即时通知
告警的通知是否应该成为一个应用
包含告警组件的Production
包含告警组件与业务组件的Production形态如下
其中,用于告警的业务组件包括
告警托管
在互操作功能中产生的告警可以选择转发到第三方系统触发告警运维工作流,也可以在IRIS中进行托管,通过IRIS提供的较为简单的工作流定义实现对告警的统一存储及管理。
工作原理
告警管理BP
决定是否产生新的托管告警
可以设置告警的所有者
通知管理BP
决定如何发送告警
决定谁将收到通知
将告警通知发送到指定组件
告警监视BS(可选组件)
可以将过期告警升级
决定是否发出提醒
典型的告警数据流如下
其中,告警数据产生后经过平台自动丰富,最终形成可供运维人员操作的托管告警
托管告警流程
告警处理流程可能的选择:
告警仅写入日志文件,没有自动通知。
一个简单的告警通知系统,所有告警都通过Email发给用户
根据告警类型和生成告警的组件,将选定告警通过路由发送给不同的用户
实现告警管理框架,用于发送告警通知、升级未解决的告警,并记录当前状态和为解决告警而采取的操作的历史记录
告警路由规则
在告警管理器中可以应用规则,通过路由规则来定义告警的流向。
来源
允许根据不同的故障组件采取不同的行动
消息类
Ens.AlertRequest或无
目标
其他消息路由,用于进一步的路由
业务操作作为最终目标
可以通过数据转换根据传递目标定制告警
托管告警管理
通过Ensemble > 监视器 > 我的托管警报可进入告警管理页
该功能基于IRIS自身的用户设置。告警责任人的分配、告警级别管理、后续操作时限等,都可以在该页上进行操作。
也可通过SQL查询和操作已产生的告警
对于需要自定义工作流的用户,也可以考虑在此基础上实现流程。
祝老师您好,请问系统级别的告警如何推送,就像系统日志中告警级别为2的日志。 Hi,
有两个办法:
1. 自己写代码扫描messages.log获得这些告警
2. 扩展平台内置的告警通知类,可以自定义传感器、消息订阅器和通知分发器,参见
https://docs.intersystems.com/irisforhealth20223/csp/docbook/DocBook.UI.Page.cls?KEY=GCM_healthmon#GCM_healthmon_sysmon_userdefined 感谢祝老师的答复,第一种方法已经实现,我研究下第二种方法。