クリアフィルター
お知らせ
Mihoko Iijima · 2023年2月13日
開発者の皆さん、こんにちは!
InterSystems デベロッパーツールコンテストの勝者が発表されました!
この記事では、コンテスト受賞者を発表します📣
その前に...
今回のコンテストですが、なんと 21 の応募 がありました!🔥 多数のご応募、ありがとうございました!
Experts Nomination
🥇 1位 - $5,000 は、irissqlcli を開発された @Dmitry.Maslennikov さんに贈られました。
🥈 2位 - $3,000 は、DX Jetpack for VS Code を開発された @John.Murray さんに贈られました。
🥉 3位 - $1,500 は、OpenAPI-Suite を開発された @Lorenzo.Scalese さんに贈られました。
🏅 4位 - $750 は、iris-geo-map を開発された @Muhammad.Waseem さんに贈られました。
🏅 5位 - $500 は、iris-tripleslash を開発された @José.Pereira さん、@Henrique.GonçalvesDias さん、@Henry.HamonPereira さんに贈られました。
さらに!
🏅 $100 は、iris-log-viewer を開発された @Oliver.Wilms さんに贈られました。
🏅 $100 は、iris-persistent-class-audit を開発された @Stefan.Cronje1399 さんに贈られました。
🏅 $100 は、iris-connections を開発された @Yuri.Gomes さんに贈られました。
🏅 $100 は、cos-url-shortener を開発された @Daniel.Aguilar さんに贈られました。
🏅 $100 は、iris-deploy-tools を開発された @Francisco.López1549 さんに贈られました。
Community Nomination
🥇 1位 - $1,000 は、 iris-tripleslash を開発された @José.Pereira さん、@Henrique.GonçalvesDias さん、@Henry.HamonPereira さんに贈られました。
🥈 2位 - $750 は、 Intersystems IRIS platform queue trend monitoring component を開発された @yubo.mao さんに贈られました。
🥉 3位 - $500 は、 irissqlcli を開発された @Dmitry.Maslennikov さんに贈られました。
今回も、コンテストにご注目いただきありがとうございました!
では、また、次のコンテストをお楽しみに!😎 
記事
Megumi Kakechi · 2023年3月9日
Windowsクライアント環境に、スタンドアロンの IRIS ODBC ドライバをインストールする際、
Error 1918. Error installing ODBC driver InterSystems IRIS ODBC.35, ODBC error 13: システム エラーコード 126: 指定されたモジュールが見つかりません。
のエラーとなりインストールに失敗する場合の対処法をご案内します。
※インストール時に以下のようなエラーが出る場合です。
***
こちらのエラーは、Windowsクライアント環境に必要なバージョンの Microsoft VC++ ランタイム ライブラリがインストールされていない場合に出力されます。
この場合、ODBCドライバをインストールする前に、必要なバージョンの「Visual C++ 再頒布可能パッケージ」をインストールする必要があります。
以下のマイクロソフト社のページより、VC++ 再頒布可能パッケージ をダウンロードしてインストールしてください。
https://docs.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist?view=msvc-170
> Visual Studio 2015、2017、2019、および 2022
なお、IRIS 2022.1 以降のバージョンでは、必要な「Visual C++ 再頒布可能パッケージ」バージョンがインストールされていない場合は、IRIS ODBC ドライバインストール時にインストールされるようになりました。
※以下のようなダイアログが出てインストールが開始します。
記事
Toshihiko Minamoto · 2023年6月29日
### 
コミュニティの皆さん、こんにちは。
この記事では、InterSystems Embedded Python の使用方法を説明します。以下のトピックが含まれます。
* 1- Embedded Python の概要
* 2- Embedded Python の使用方法
* 2.1- ObjectScript から Python ライブラリを使用する
* 2.2- Python から InterSystems API を呼び出す
* 2.3- ObjectScript と Python を同時に使用する
* 3- Python 組み込み関数の使用
* 4- Python モジュール/ライブラリ
* 5- Embedded Python のユースケース
* 5.1- Python **Reportlab ライブラリ**を使った PDF の印刷
* 5.2- Python **Qrcode ライブラリ**を使った QR コードの生成
* 5.3- Python **Folium ライブラリ**を使った地理的位置情報の取得
* 5.4- Python **Folium ライブラリ**を使ったインタラクティブ地図への場所の生成とマーキング
* 5.5- Python **Pandas ライブラリ**を使ったデータ分析 **
* 6- まとめ
では、概要から始めましょう。
** **
## 1- Embedded Python の概要
Embedded Python は、Python 開発者が InterSystems IRIS の全データと全機能に直接アクセスできるようにする、InterSystems IRIS データプラットフォームの機能です。
InterSystems IRIS には、データプラットフォーム内で解釈、コンパイル、および実行される ObjectScript と呼ばれる強力なプログラミング言語が組み込まれています。
ObjectScipt は InterSystems IRIS のコンテキスト内で実行されるため、データプラットフォームのメモリとプロシージャ呼び出しに直接アクセスできます。
Embedded Python は、InterSystems IRIS プロセスコンテキスト内で Python コードを実行を可能にする Python プログラミング言語の拡張機能です。
ObjectScript と Python のいずれも同じオブジェクトメモリで動作するため、Python オブジェクトは ObjectScript オブジェクトを単にエミュレートするのではなく、ObjectScipt オブジェクトであると言えます。
これらの言語の共平等性により、ジョブに最適な言語か、アプリケーションの記述に最も使いやすい言語を選択することができます。

## 2- Embedded Python の使用方法
Embedded Python を使用する場合、3 つの異なる方法でコードを記述できます。
### 2.1- ObjectScript から Python ライブラリを使用する
まず、通常の .py ファイルを記述し、InterSystems IRIS コンテキストからそれを呼び出します。 この場合、データプラットフォームは Python プロセスを起動し、IRIS と呼ばれるモジュールをインポートできるようにします。これにより、Python プロセスが IRIS カーネルに自動的に接続されるため、Python コードのコンテキストから ObjectScript のすべての機能にアクセスできるようになります。
.png)
### 2.2- Python から InterSystems API を呼び出す
次に、通常の ObjectScript コードを記述し、%SYS.Python パッケージを使って Python オブジェクトをインスタンス化します。 この ObjectScript パッケージを使うと、Python モジュールとライブラリをインストールし、ObjectScript 構文でコードベースを操作できるようになります。
%SYS.Python パッケージを使うと、ObjectScript 開発者は Python の知識が無くてもリッチな Python ライブラリエコシステムを ObjectScript コードで使用できるようになります。
.png)
### 2.3- ObjectScript と Python を同時に使用する
最後に、InterSystems クラス定義を作成し、Python でメソッドを記述します。 そのメソッドを呼び出すと、Python インタープリターが起動します。 このメソッドは、メリットとして、それを含むクラスのインスタンスへの参照を使って、Python コードのそのブロックの self キーワードを埋めることができます。 また、Python を使って InterSystems クラスにクラスメソッドを書き込むことで、SQL で、テーブルに新しい行が追加されたなどの異なるデータエントリイベントを処理するメソッドを簡単に実装できます。
カスタムストアドプロシージャを Python で迅速に開発することも可能です。
.png)
ご覧のとおり、Embedded Python を使用すると、パフォーマンスを犠牲にすることなく、ジョブに最適なプログラミング言語を選択できます。

## 3- Python 組み込み関数の使用
Python インタープリターには、常に利用できる多数の関数と型が組み込まれています。 以下に、アルファベット順でリストしています。
組み込み関数
AELR
abs()
enumerate()
len()
range()
aiter()
eval()
list()
repr()
all()
exec()
locals()
reversed()
any()
round()
anext()
F
M
ascii()
filter()
map()
S
float()
max()
set()
B
format()
memoryView()
setattr()
bin()
frozenset()
min()
slice()
breakpoint()
G
N
staticmethod()
bytearray()
getattr()
next()
str()
bytes()
globals()
sum()
O
super()
C
H
object()
callable()
hasattr()
oct()
T
chr()
hash()
open()
tuple()
classmethod()
help()
ord()
type()
compile()
hex()
complex()
P
V
I
pow()
vars()
D
id()
print()
delattr()
input()
property()
Z
dict()
int()
zip()
dir()
isinstance()
divmod()
issubclass()
-
iter()
__import__()
**Python 組み込み 関数の使用**
Python 組み込み関数を使用するには、"builtins" をインポートする必要があります。その後、関数を呼び出せるようになります。
set builtins = ##class(%SYS.Python).Import("builtins")
Python の print() 関数は、実際には組み込みモジュールのメソッドであるため、ObjectScript からこの関数を使用できるようになりました。
USER>do builtins.print("hello world!")
hello world!
USER>set list = builtins.list()
USER>zwrite list
list=5@%SYS.Python ; [] ; <OREF>
同様に、help() メソッドを使って、リストオブジェクトのヘルプを取得できます。
USER>do builtins.help(list)
Help on list object:
class list(object)
| list(iterable=(), /)
|
| Built-in mutable sequence.
|
| If no argument is given, the constructor creates a new empty list.
| The argument must be an iterable if specified.
|
| Methods defined here:
|
| __add__(self, value, /)
| Return self+value.
|
| __contains__(self, key, /)
| Return key in self.
|
| __delitem__(self, key, /)
| Delete self[key].
## 
## 4- Python モジュールまたはライブラリ
一部の Python モジュールまたはライブラリはデフォルトでインストールされるため、すでに利用することができます。 help("module") 関数を使うと、これらのモジュールを表示できます。


### Python モジュールまたはライブラリのインストール
これらのモジュールとは別に、Python には数百ものモジュールとライブラリがあり、pypi.org で確認できます。(Python Package Index(PyPI)は Python プログラミング言語のソフトウェアリポジトリです)
.png)
他のライブラリが必要な場合は、intersystems irispip コマンドを使ってライブラリをインストールする必要があります。
たとえば、Pandas は Python データ分析ライブラリです。 以下のコマンドは、パッケージインストーラーの irispip を使用して、Windows システムに Pandas をインストールします。
C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python pandas
C:\InterSystems は InterSystems インストールディレクトリに置き換えられることに注意してください。
** **
## 5- Embedded Python のユースケース
### 5.1- Python Reportlab ライブラリを使った PDF の印刷
irispip コマンドを使用して Reportlab ライブラリをインストールしてから、objectscript 関数を作成します。
ファイルの場所を指定すると、以下の CreateSamplePDF() という ObjectScript メソッドによって、サンプル PDF ファイルが作成され、その指定場所に保存されます。
Class Demo.PDF
{
ClassMethod CreateSamplePDF(fileloc As %String) As %Status
{
set canvaslib = ##class(%SYS.Python).Import("reportlab.pdfgen.canvas")
set canvas = canvaslib.Canvas(fileloc)
do canvas.drawImage("C:\Sample\isc.png", 150, 600)
do canvas.drawImage("C:\Sample\python.png", 150, 200)
do canvas.setFont("Helvetica-Bold", 24)
do canvas.drawString(25, 450, "InterSystems IRIS & Python. Perfect Together.")
do canvas.save()
}
}
メソッドの最初の行では、ReportLab の pdfgen サブパッケージから canvas.py ファイルをインポートしています。 コードの 2 行目は、Canvas オブジェクトをインスタンス化し、InterSystems IRIS オブジェクトのメソッド呼び出しと同じ方法で、メソッドを呼び出しています。
その後、通常の方法でメソッドを呼び出せるようになります。
do ##class(Demo.PDF).CreateSamplePDF("C:\Sample\hello.pdf")
以下の PDF が生成され、指定された場所に保存されます。
****
** **
### 5.2- Python Qrcode ライブラリを使った QR コードの生成
QR コードを生成するには、irispip コマンドを使用して Qrcode ライブラリをインストールする必要があります。次に、以下のコードを使用すると、QR コードを生成できます。
.png)

### 5.3- Python Folium ライブラリを使った地理的位置情報の取得
地理データを取得するには、irispip コマンドを使用して Folium ライブラリをインストールする必要があります。次に、以下の objectscript 関数を作成します。
Class dc.IrisGeoMap.Folium Extends %SwizzleObject
{
// Function to print Latitude, Longitude and address details
ClassMethod GetGeoDetails(addr As %String) [ Language = python ]
{
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="IrisGeoApp")
try:
location = geolocator.geocode(addr)
print("Location:",location.point)
print("Address:",location.address)
point = location.point
print("Latitude:", point.latitude)
print("Longitude:", point.longitude)
except:
print("Not able to find location")
}
}
**IRIS ターミナルに接続して以下のコードを実行します**
do ##class(dc.IrisGeoMap.Folium).GetGeoDetails("Cambridge MA 02142")
**以下が出力されます。**


### 5.4- Python Folium ライブラリを使ったインタラクティブ地図への場所の生成とマーキング
同じ Python Folium 伊良部らりを使用して、インタラクティブ地図に場所を生成し、それをマーキングします。以下の objectsctipt 関数によって、これを実行します。
ClassMethod MarkGeoDetails(addr As %String, filepath As %String) As %Status [ Language = python ]
{
import folium
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="IrisGeoMap")
#split address in order to mark on the map
locs = addr.split(",")
if len(locs) == 0:
print("Please enter address")
elif len(locs) == 1:
location = geolocator.geocode(locs[0])
point = location.point
m = folium.Map(location=[point.latitude,point.longitude], tiles="OpenStreetMap", zoom_start=10)
else:
m = folium.Map(location=[20,0], tiles="OpenStreetMap", zoom_start=3)
for loc in locs:
try:
location = geolocator.geocode(loc)
point = location.point
folium.Marker(
location=[point.latitude,point.longitude],
popup=addr,
).add_to(m)
except:
print("Not able to find location : ",loc)
map_html = m._repr_html_()
iframe = m.get_root()._repr_html_()
fullHtml = """
"""
fullHtml = fullHtml + iframe
fullHtml = fullHtml + """
"""
try:
f = open(filepath, "w")
f.write(fullHtml)
f.close()
except:
print("Not able to write to a file")
}
**IRIS ターミナルに接続し、MarkGeoDetails 関数を呼び出します**
dc.IrisGeoMap.Folium クラスの MarkGeoDetails() 関数を呼び出します。
この関数には、以下の 2 つのパラメーターが必要です。
1. 場所("," 区切りで、複数の場所を渡すことができます)
2. HTML ファイルパス
以下のコマンドを実行し、地図に Cambridge MA 02142、NY、London、UAE、Jeddah、Lahore、および Glasgow の場所をマークして、 "irisgeomap_locations.html" ファイルとして保存します。
do ##class(dc.IrisGeoMap.Folium).MarkGeoDetails("Cambridge MA 02142,NY,London,UAE,Jeddah,Lahore,Glasgow","d:\irisgeomap_locations.html")
上記のコードによって、以下のインタラクティブ HTML ファイルが生成されます。


### 5.5- Python Pandas ライブラリを使ったデータ分析
irispip コマンドを使用して Pnadas ライブラリをインストールする必要があります。次に、以下のコードを使用すると、データが表示されます。
.png)

## 6- まとめ
InterSystems Embedded Python(IEP)は、Python コードと InterSytems アプリケーションをシームレスに統合できる強力な機能です。 IEP を使用すると、Python で利用可能な広範なライブラリとフレームワークを活用して、InterSystems アプリケーションの機能を強化できます。 この記事では、IEP の主な機能とメリットを説明しました。
IEP は、InterSystems アプリケーション内から Python オブジェクトを操作し、Python コードを実装できるようにする一連のライブラリとして実装されています。 これにより、単純で有効な方法によって、Python コードを InterSystems アプリケーションに統合できるため、データ分析、機械学習、自然言語処理など、InterSystems ObjectScript での実装が困難なタスクを実行できるようになります。
IEP を使用する主なメリットの 1 つには、Python と InterSysems の間のギャップのかけ渡しを得られることが挙げられます。 このため、両方の言語の持つ力を使って、両分野の長所を組み合わせた強力なアプリケーションを作成しやすくなります。
IEP には、Python の機能を活用して、InterSystems アプリケーションの機能を拡張する方法も備わっています。 つまり、InterSystems ObjectScript で実装するには困難なタスクに、Python で利用できる膨大な数のライブラリをフレームワークを利用して実行できます。
InterSystems Embedded Python には、Python の機能を活用して、InterSystems アプリケーションの機能を拡張する強力な方法が備わっています。 Python コードを InterSystems アプリケーションに統合することで、Python で利用できる膨大な数のライブラリとフレームワークを利用し、InterSystems ObjectScript での実装が困難な複雑なタスクを実行できます。
以上です!
質問
Hiroshi Sato · 2020年8月26日
InterSystems IRIS Data Platformに関して販売している書籍は現時点ではありません。
旧製品であるCachéの公式ガイドブックとして、「Cachéデベロッパーズガイド(翔泳社)」という本があります。(ISBN978-4-7981-1885-7)
しかし、内容がかなり古いため、以下のウェブサイトで更新した内容を公開しています。
IRISディベロッパーズガイド
また実践プログラミングガイドという文書も公開しています。
IRIS実践プログラミングガイド 上記の
IRISディベロッパーズガイド
IRIS実践プログラミングガイド
を使用したいと思いGit Hubからダウンロードしdocker-compose up -d --buildしたのですが、以下のエラーが出て使用できないのですが、使用する方法を教えていただけませんか?
↓↓↓↓↓↓↓↓
=> [ 8/10] COPY csp/*.* /usr/irissys/csp/user/ 0.0s => ERROR [ 9/10] RUN iris start IRIS && iris session IRIS < /tmp/iris.script && iris stop IRIS quietly 11.4s------ > [ 9/10] RUN iris start IRIS && iris session IRIS < /tmp/iris.script && iris stop IRIS quietly:#14 0.369 Using 'iris.cpf' configuration file#14 0.487#14 0.976 This copy of InterSystems IRIS has been licensed for use exclusively by:#14 0.976 Community License expired.#14 0.976 Copyright (c) 1986-2021 by InterSystems Corporation#14 0.976 Any other use is a violation of your license agreement#14 3.363#14 3.363 Error: Invalid Community Edition license, may have exceeded core limit. - Shutting down the system : $zu(56,2)= 0Starting IRIS#14 11.39#14 11.39 An error was detected during InterSystems IRIS startup.#14 11.39 ** Startup aborted **------failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c iris start IRIS && iris session IRIS < /tmp/iris.script && iris stop IRIS quietly]: exit code: 1 @TAKI.KURITA さん、こんにちは!
エラーですが、IRIS 2021.1コミュニティエディションに組み込まれているライセンスの期限切れが原因のようです(関連記事はこちら)。大変申し訳ありません。
今、Gitの先を見ると Dockerfile のイメージ:タグ名の指定が、新しいタグ名に更新されているようですので(@Hiroshi.Sato さんありがとうございます!)、もう1度 ソースを Pull した後、docker-compose up -d --build をお試しいただけないでしょうか。 再インストールしたらうまくいきました!
迅速な対応いつもありがとうございます!!
記事
Mihoko Iijima · 2020年6月28日
基本操作編ビデオシリーズ:その2
IRIS で開発を始めるために必要な準備について以下の内容をご説明します。
管理ポータルの起動方法
ネームスペースの作成方法
IDEからIRISへ接続する方法
もくじ
最初から ~ 6:50 管理ポータルの開き方とメニューについて
7:03 ~ 12:50 ネームスペースとデータベースについて
12:50 ~ 17:10 ネームスペース、データベースの作成実演
17:10 ~ 20:50 スタジオを使用する場合の設定内容
20:50 ~ 22:35 スタジオ:IRISへの接続実演
22:35 ~ 26:50 VS Codeを使用する場合の設定内容
26:52 ~ VS Code:IRISへの接続実演
※YouTubeでご覧いただくと「もくじ」に記載の秒数クリックでビデオをジャンプできます。
その他ビデオ一覧は索引ページをご参照ください。
《2021/7/21 ビデオを更新しました》
VSCode の ObjectScript エクステンションを利用して IRIS に接続する説明を更新しました(settings.json に接続情報を設定する方法の解説に変更しました)。
記事
Toshihiko Minamoto · 2021年11月16日
ODataとは?
OData(Open Data Protocol)は、RESTful APIの構築と消費に関する一連のベストプラクティスを定義するISO/IEC認定のOASIS標準です。 ODataは、リクエストとレスポンスのヘッダー、ステータスコード、HTTPメソッド、URL変換、メディアタイプ、ペイロード形式、クエリオプションなどを定義するための多様なアプローチを気にせずに、RESTful APIを構築しながらビジネスロジックに専念するのに役立ちます。 また、ODataには変更の追跡、再利用可能なプロシージャの関数/アクションの定義、および非同期/バッチリクエストの送信に関するガイダンスも提供されています(出典: OData.org)。
ODataのユースケース
開発作業なしで、相互運用可能な形式でデータをRESTサービスとしてデプロイする。
開発作業なしで、RESTを使って、BI、データ視覚化、ERP、CRM、ESB、ワークフローツール、およびエンジンでデータを消費できるようにする。
API管理ツールで企業データを仮想化する。
ODataは、これらのRESTful APIを使用して、SQLのようなクエリ機能を可能にするREST APIを実装するための標準的な方法を提唱しています。 ODataは基本的に、RESTアーキテクチャスタイルを利用しながら、HTTP、JSON、およびATOMの標準プロトコルを土台に構築されたWeb用のSQLです(出典: progress.com)。
ODataは幅広く採用されています。以下をご覧ください。
ODataはFHIRの実装に役立ちます。FHIR(Fast Healthcare Interoperability Resources Specification)は、医療情報を電子的に交換するための標準です。 FHIRを実質的に相互運用可能にため、$searchパラメーターにはOData仕様で規定されたルールをシステムが使用することが推奨されます。 さらに、FHIRは、クライアントとの信頼関係を築くため、追加のセキュリティレイヤにOAuthも使用しています(出典: progress.com)。
ODataは、ページネーション、バッチリクエスト、およびJSON、ATOM、XMLなどのさまざまな形式をサポートしています。
ODataとInterSystems IRIS
InterSystems IRISはODataをサポートしていませんが、OData Server for InterSystems IRISを使用して、永続クラスをRESTとして公開することが可能です。
次の手順に従ってください。
IRIS OData Serverのソースコードのクローンを次のようにして作成します: git clone https://github.com/yurimarx/isc-iris-odata.git
次のフォルダに移動します: isc-iris-odata folder
次を実行します: mvnw install(MS Windows)または ./mvnw install(Linuxまたはmac)
次を実行します: docker build -t odata:1.0.0
次を実行します: docker run -p 8080:8080 odata:1.0.0 OData Serverが起動します:
任意の永続クラスでInterSystems IRISインスタンスを起動します。
ブラウザで次にアクセスします: http://localhost:8080/ 画面でパラメーターを設定します:
これは私のインスタンスのパラメーターです。 ご利用のIRISインスタンスにパラメーターを設定してください。 ネームスペースにあなたのIRISのネームスペース、スキーマにSQLテーブルスキーマ、ポートにJDBCデータベース接続へのポートを設定します。
[送信]を押すと、OData Server Dockerインスタンスが再読み込みされてパラメーターが適用されます。
http://localhost:8080/odata.svc/にアクセスし、IRISスキーマのすべての永続クラスを表示します。 私の場合は次のようになります。
永続クラスに移動するには、次を参照します: http://localhost:8080/odata.svc/<Persistent_Class> 例: http://localhost:8080/odata.svc/Animal
ODataサーバーは次のようにAnimalデータをリスト表示します。
JSON形式で表示するには、次を参照します: http://localhost:8080/odata.svc/Animal?$format=application/json 次に例を示します。
行の詳細を表示するには、次を参照します: http://localhost:8080/odata.svc/Animal(8)?$format=application/json
削除するには、Postmanで次を指定してDELETEを送信します: http://localhost:8080/odata.svc/Animal(8)
挿入するには、次のようにPostmanで http://localhost:8080/odata.svc/Animalとプロパティ名と値のペアを持つJSON本体を指定してPOSTを送信します。
永続クラスを使用して、すべてのCRUD操作を実行できます。
IRIS OData Serverがコミュニティで採用されるようになれば、今後、その他多数の機能がリリースされるでしょう。
それでは!
記事
Megumi Kakechi · 2023年6月11日
インターシステムズは、InterSystems Supply Chain Orchestrator と InterSystems IRIS for Supply Chain の2023.1リリースを一般提供開始(GA)したことを発表しました。
InterSystems Supply Chain Orchestratorは、InterSystems IRIS上に構築されており、スマートデータファブリックアーキテクチャを実現し、データとアプリケーションサイロを接続する高性能な機械学習対応アプリケーションの構築と展開を容易にする完全クラウドファーストデータプラットフォームです。InterSystems IRISとサプライチェーンに特化したアクセラレータやフレームワークのパワーを結集し、サプライチェーンのオーケストレーション、需要の検知と予測、フルフィルメント、動きの速い消費財の再梱包に最適化したソリューションを提供しています。
InterSystems Supply Chain Orchestratorの主要コンポーネントであるInterSystems IRIS for Supply Chainは、InterSystems IRISが提供するスマートデータファブリックアーキテクチャをサプライチェーンのユースケースに近づけ、価値実現までの時間を短縮するための支援を行います。
*: InterSystems IRIS Advanced サーバーが必要です**: InterSystems Package Manager (IPM) を通じて利用可能です
【機能のハイライト】
InterSystems IRIS for Supply Chain 2023.1 は、InterSystems IRIS に加えて以下の機能を提供します。
カスタマイズ可能なサプライチェーンデータモデル
組み込みの分析キューブ
KPI構成フレームワーク
問題のライフサイクル管理
問題分析と実用的な洞察
REST API の完全なサポート
【ドキュメントと参考資料】
注目機能の詳細は、以下のリンクからご覧いただけます。
製品ドキュメント:InterSystems IRIS for Supply Chain 2023.1(英語)
インターシステムズのオンライン学習:サプライ チェーンの学習パス(英語)
インターシステムズの概要:サプライ チェーン
お知らせ
Seisuke Nakahashi · 2023年7月3日
InterSystems IRIS Cloud SQL は、何千ものエンタープライズのお客様に利用いただいている InterSystems IRIS の優れたリレーショナルデータベース機能を実感いただける、幅広いアプリケーション開発者やデータ専門家のみなさまのためのフルマネージドサービスです。また InterSystems IRIS Cloud IntegratedML は、この DBaaS (Database-as-a-Service) のオプションであり、SQL ネイティブを通じて強力な自動機械学習機能を簡単にご利用いただけるサービスを提供します。シンプルな一連の SQL コマンドは簡単にアプリケーションコードに組み込むことができるため、データに近いところで動作する ML モデルにより、お客様のアプリケーションを拡張することができます。
本日は、これら2製品に関する 開発者アクセスプログラム を発表いたします。アプリケーション開発者は本サービスにみなさまご自身で登録いただくことで、デプロイメントの作成、構成可能なアプリケーションのビルド、そして本サービスによってプロビジョン、構成、システム管理が実行されるスマートデータべースを体験いただけます。
開発者のみなさまは、期間限定で完全無料の小さなデプロイを行うことで、すぐに InterSystems IRIS クラウドテクノロジーのパフォーマンスを体験できるフリートライアルをご利用いただけます。あるいは、AWS マーケットプレイスを通じて、フルセットのインスタンスのデプロイをお申込みいただけます(こちらは AWS アカウントに請求が行われます)。コアとなるリレーショナル・データベース・サービスを補完・サポートするために、InterSystems クラウドチームは、開発者アクセスプログラムを通じて追加機能や製品機能を迅速に展開していきます。ユーザ・エクスペリエンスをさらに向上させるためにも、みなさまからのフィードバックを心からお待ちしています。
InterSystems IRIS Cloud SQL ならびに Cloud IntegratedML アドオンは、InterSystems クラウド製品ラインの基本となるサービスであり、また InterSystems のヘルスケア業界向けの初期の SaaS (Software-as-a-Service) や PaaS (Platform-as-a-service) の成功事例を補完するものです。そして、日々目まぐるしく変化する今日のテクノロジー環境において、プロビジョン、拡張、運用をより簡単に行うソリューションを実装するために必要な、コンポーザビリティ・アプローチを実現するブロック要素となるものです。
ぜひ開発者アクセスプログラムにご登録いただき、新しいソリューションを目指してください!
開発者アクセスプログラムでは AWS us-east-1 リージョンでのみデプロイできます。また本プログラムはこの利用規約が適用されます。
記事
Megumi Kakechi · 2020年10月13日
これはInterSystems FAQ サイトの記事です。InterSystems IRIS Native API for Java のメソッドに、IRIS クラスメソッドを呼び出す classMethod***() があります。ObjectScript メソッドおよび関数の呼び出し
こちらを使用することで、InterSystems IRIS Native API for Java から InterSystems IRIS のクラスメソッドを呼び出すことが可能です。以下、使用方法について簡単なサンプルをご紹介します。
*SampleNativeAPI .java
import java.sql.DriverManager;import com.intersystems.jdbc.IRISConnection;import com.intersystems.jdbc.IRIS;import com.intersystems.jdbc.IRISIterator;
public class SampleNativeAPI { protected static int superserverPort = 51773; // YOUR PORT HERE protected static String namespace = "USER"; protected static String username = "_SYSTEM"; protected static String password = "SYS";
public static void main(String[] args) { try { // open connection to InterSystems IRIS instance using connection string String url = "jdbc:IRIS://localhost:"+superserverPort+"/"+namespace; IRISConnection conn = (IRISConnection) DriverManager.getConnection(url,username,password);
// create IRIS Native object IRIS iris = IRIS.createIRIS(conn);
System.out.println("[1. Setting and getting a global]");
// setting and getting a global // ObjectScript equivalent: set ^testglobal("1") = 8888 iris.set(8888,"^testglobal","1");
// ObjectScript equivalent: set globalValue = $get(^testglobal("1")) Integer globalValue = iris.getInteger("^testglobal","1"); System.out.println("The value of ^testglobal(1) is " + globalValue); System.out.println();
System.out.println("[2. Iterating over a global]");
// modify global to iterate over // ObjectScript equivalent: set ^testglobal("1") = 8888 // ObjectScript equivalent: set ^testglobal("2") = 9999 iris.set(8888,"^testglobal","1"); iris.set(9999,"^testglobal","2"); // iterate over all nodes forwards IRISIterator subscriptIter = iris.getIRISIterator("^testglobal"); System.out.println("walk forwards"); while (subscriptIter.hasNext()) { String subscript = subscriptIter.next(); System.out.println("subscript="+subscript+", value="+subscriptIter.getValue()); } System.out.println(); System.out.println("[3. Calling a class method]");
// calling a class method // ObjectScript equivalent: set returnValue = ##class(%Library.Utility).Date(5) String returnValue = iris.classMethodString("%Library.Utility","Date",5); System.out.println(returnValue); System.out.println();
// close connection and IRIS object iris.close(); conn.close();
} catch (Exception ex) { System.out.println(ex.getMessage()); } }
}
InterSystems IRIS Native API for Java の使用方法については、以下のドキュメントをご覧ください。InterSystems IRIS Native API for Java の使用法
また、Java側から InterSystems IRIS のストアドプロシージャをJDBC経由で呼び出す方法もあります。詳細は、【FAQ】 Javaから配列のような複数項目のデータを渡すにはどうすれば良いですか をご覧ください。
お知らせ
Makiko Kokubun · 2020年10月13日
開発者のみなさん、こんにちは!
インターシステムズは、10/20-11/5 にかけて、年次カンファレンス InterSystems Virtual Summit 2020 をオンラインで開催いたします。
⚡️ 現在、事前登録受付中です! ⚡️
Virtual Summit では、IT技術に詳しい経営層、技術マネージャ、開発者、システムインテグレータの方など、全ての方にとって価値のある内容をお届けします。 今年はすべてのセッションに無料でご参加いただけます!
時間は日本のタイムゾーンに合わせて開催いたします。
今年のサミットのテーマは インタラクション & インフォメーション(相互作用と情報)です。サミットでは、以下のようなセッションが開催されます。
✅ 基調講演適応力の高い組織の創造10/20 - 10/22
✅ 60以上のフォーカスセッションベストプラクティス、新機能、ロードマップ 10/27 - 10/29
✅ ASK THE EXPERTS専門家と個別にご相談いただけます。10/30, 11/2
✅ EXPERIENCE LABS最新技術をハンズオンでご体験いただけます。11/2 - 11/5
詳細は、こちらをご覧ください。 intersystems.com/summit20
ぜひ、Virtual Summit 2020にご参加ください!
記事
Toshihiko Minamoto · 2020年11月12日
[Prometheus](https://prometheus.io/) は[時系列データ](https://en.wikipedia.org/wiki/Time_series_database)の収集に適した監視システムです。
このシステムのインストールと初期構成は比較的簡単です。 このシステムにはデータ視覚化用の [PromDash](https://github.com/prometheus-junkyard/promdash) [](https://github.com/prometheus-junkyard/promdash)と呼ばれる画像サブシステムが組み込まれていますが、開発者は [Grafana](http://grafana.org/) と呼ばれる無料のサードパーティ製品を使用することを推奨しています。 Prometheus は多くの要素(ハードウェア、コンテナ、さまざまな DBMS の構成要素)を監視できますが、この記事では [Caché](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls) インスタンス(正確に言えば Ensemble インスタンスですが、メトリックは Caché からのものになります)の監視に注目したいと思います。 ご興味があれば、このまま読み進めてください。
非常に単純なケースでは、Prometheus と Caché は単一のマシン(Fedora Workstation 24 x86_64)上に存在します。 Caché のバージョンは以下のとおりです。
%SYS>write $zvCache for UNIX (Red Hat Enterprise Linux for x86-64) 2016.1 (Build 656U) Fri Mar 11 2016 17:58:47 EST
**インストールと構成**
[公式サイト](https://prometheus.io/download/)から適切な Prometheus の配布パッケージをダウンロードし、/opt/prometheus フォルダーに保存してください。

アーカイブを解凍し、必要に応じてテンプレート構成ファイルを変更してから Prometheus を起動します。 Prometheus はデフォルトでコンソールにログを表示するため、ここではアクティビティレコードをログファイルに保存することにします。
**Prometheus の起動**
# pwd/opt/prometheus# lsprometheus-1.4.1.linux-amd64.tar.gz# tar -xzf prometheus-1.4.1.linux-amd64.tar.gz# lsprometheus-1.4.1.linux-amd64 prometheus-1.4.1.linux-amd64.tar.gz# cd prometheus-1.4.1.linux-amd64/# lsconsole_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool# cat prometheus.yml global: scrape_interval: 15s # スクレイプ間隔を 15 秒に設定します。 デフォルトは 1 分ごとです。
scrape_configs: - job_name: 'isc_cache' metrics_path: '/metrics/cache' static_configs: - targets: ['localhost:57772']# ./prometheus > /var/log/prometheus.log 2>&1 &[1] 7117# head /var/log/prometheus.logtime=«2017-01-01T09:01:11+02:00» level=info msg=«Starting prometheus (version=1.4.1, branch=master, revision=2a89e8733f240d3cd57a6520b52c36ac4744ce12)» source=«main.go:77»time=«2017-01-01T09:01:11+02:00» level=info msg=«Build context (go=go1.7.3, user=root@e685d23d8809, date=20161128-09:59:22)» source=«main.go:78»time=«2017-01-01T09:01:11+02:00» level=info msg=«Loading configuration file prometheus.yml» source=«main.go:250»time=«2017-01-01T09:01:11+02:00» level=info msg=«Loading series map and head chunks...» source=«storage.go:354»time=«2017-01-01T09:01:11+02:00» level=info msg=«23 series loaded.» source=«storage.go:359»time=«2017-01-01T09:01:11+02:00» level=info msg="Listening on :9090" source=«web.go:248»
prometheus.yml 構成ファイルは [YAML](https://en.wikipedia.org/wiki/YAML) 言語で記述されているため、タブ文字の使用は好ましくありません。したがって、スペースのみを使用する必要があります。 また、すでにお伝えしたとおり、メトリックは からダウンロードされ、リクエストは /metrics/cache に送信されます(アプリケーション名は任意)。したがって、メトリック収集用の宛先アドレスは になります。 「job = isc_cache」タグが各メトリックに追加されます。 大まかに言えば、タグは SQL の WHERE に相当するものです。 ここではタグを使用しませんが、複数のサーバーを使用する場合は役に立つでしょう。 例えばサーバー(またはインスタンス)の名前をタグに保存し、タグを使用してグラフ描画用のリクエストをパラメーター化することができます。 では、Prometheus が動作していることを確認しましょう(上記の出力では、9090 番ポートでリッスンしていることが分かります)。

Web インターフェイスが開きます。これは、Prometheus が機能していることを意味します。 ただし、Caché のメトリックはまだ表示されていません([Status] → [Targets] をクリックして確認しましょう)。

**メトリックの準備**
目標は、Prometheus が で[適切なフォーマット](https://prometheus.io/docs/instrumenting/writing_exporters/)でメトリックにアクセスできるようにすることです。 ここではその単純さを考慮し、[Caché の REST 機能](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GREST)を使用します。 Prometheus は数値メトリックのみを「理解」するため、ここでは文字列メトリックをエクスポートしません。 後者を取得するには、[SYS.Stats.Dashboard](http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?PAGE=CLASS&LIBRARY=%25SYS&CLASSNAME=SYS.Stats.Dashboard) クラスの API を使用します。 このようなメトリックは、Caché 自体がシステムツールバーを表示する目的で使用されています。

同じ内容をターミナルで表示した例:
%SYS>set dashboard = ##class(SYS.Stats.Dashboard).Sample() %SYS>zwrite dashboarddashboard=
<OBJECT REFERENCE>
[2@SYS.Stats.Dashboard]+----------------- general information ---------------| oref value: 2| class name: SYS.Stats.Dashboard| reference count: 2+----------------- attribute values ------------------| ApplicationErrors = 0| CSPSessions = 2| CacheEfficiency = 2385.33| DatabaseSpace = "Normal"| DiskReads = 14942| DiskWrites = 99278| ECPAppServer = "OK"| ECPAppSrvRate = 0| ECPDataServer = "OK"| ECPDataSrvRate = 0| GloRefs = 272452605| GloRefsPerSec = "70.00"| GloSets = 42330792| JournalEntries = 16399816| JournalSpace = "Normal"| JournalStatus = "Normal"| LastBackup = "Mar 26 2017 09:58AM"| LicenseCurrent = 3| LicenseCurrentPct = 2. . .
ここでは USER スペースがサンドボックスになります。 まず、REST アプリケーションの /metrics を作成しましょう。 非常に基本的な安全対策を行うため、ログインをパスワードで保護し、Web アプリケーションをリソースに関連付けます。このようなリソースを PromResource と呼びましょう。 リソースへの公開アクセスを無効にするため、次の内容を実行してください。
%SYS>write ##class(Security.Resources).Create("PromResource", "Resource for Metrics web page", "")1
Web アプリの設定:
このリソースにアクセスできるユーザーも必要です。 このユーザーもデータベース(この場合は USER)から読み取り、そこへデータを保存できる必要があります。 また、別件ですがコードの後半部では %SYS スペースに切り替えるため、このユーザーには CACHESYS システムデータベースの読み取り権限が必要になります。 ここでは標準のスキームに従います。すなわち、これらの権限を持つ PromRole ロールを作成した後にこのロールに割り当てられた PromUser ユーザーを作成します。 パスワードには「Secret」を使いましょう。
%SYS>write ##class(Security.Roles).Create("PromRole","Role for PromResource","PromResource:U,%DB_USER:RW,%DB_CACHESYS:R"1%SYS>write ##class(Security.Users).Create("PromUser","PromRole","Secret")1
Prometheus の構成では、この PromUser ユーザーを認証に使用します。 完了後はサーバープロセスに SIGNUP シグナルを送信し、構成を再読み込みします。
より安全な構成
# cat /opt/prometheus/prometheus-1.4.1.linux-amd64/prometheus.ymlglobal: scrape_interval: 15s # スクレイプ間隔を 15 秒に設定します。 デフォルトは 1 分ごとです。 scrape_configs: - job_name: 'isc_cache' metrics_path: '/metrics/cache' static_configs: - targets: ['localhost:57772'] basic_auth: username: 'PromUser' password: 'Secret'## kill -SIGHUP $(pgrep prometheus) # または kill -1 $(pgrep prometheus)
以上で Prometheus がメトリックを含む Web アプリケーションを使用するための認証をパスできるようになりました。
メトリックは、my.Metrics リクエスト処理クラスによって提供されます。以下にその実装を示します。
Class my.Metrics Extends %CSP.REST
{
Parameter ISCPREFIX = "isc_cache";
Parameter DASHPREFIX = {..#ISCPREFIX_"_dashboard"};
XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/cache" Method="GET" Call="getMetrics"/>
</Routes>
}
/// 出力は Prometheus の出力フォーマットに従う必要があります。 ドキュメントは以下で確認できます。
/// https://prometheus.io/docs/instrumenting/exposition_formats/
///
/// このプロトコルは行指向です。 改行文字(\n)は行を区切ります。
/// 最後の行は改行文字で終了する必要があります。 空の行は無視されます。
ClassMethod getMetrics() As %Status
{
set nl = $c(10)
do ..getDashboardSample(.dashboard)
do ..getClassProperties(dashboard.%ClassName(1), .propList, .descrList)
for i=1:1:$ll(propList) {
set descr = $lg(descrList,i)
set propertyName = $lg(propList,i)
set propertyValue = $property(dashboard, propertyName)
// Prometheusは時系列データベースをサポートします。
// そのため、空(バックアップメトリックなど)や非デジタルメトリックを
// 取得した場合はそれらを単に省略します。
if ((propertyValue '= "") && ('$match(propertyValue, ".*[-A-Za-z ]+.*"))) {
set metricsName = ..#DASHPREFIX_..camelCase2Underscore(propertyName)
set metricsValue = propertyValue
// 各メトリックの説明(ヘルプ)を記述します。
// フォーマットはPrometheusが要求するものです。
// 複数行の説明は1つの文字列に結合する必要があります。
write "# HELP "_metricsName_" "_$replace(descr,nl," ")_nl
write metricsName_" "_metricsValue_nl
}
}
write nl
quit $$$OK
}
ClassMethod getDashboardSample(Output dashboard)
{
new $namespace
set $namespace = "%SYS"
set dashboard = ##class(SYS.Stats.Dashboard).Sample()
}
ClassMethod getClassProperties(className As %String, Output propList As %List, Output descrList As %List)
{
new $namespace
set $namespace = "%SYS"
set propList = "", descrList = ""
set properties = ##class(%Dictionary.ClassDefinition).%OpenId(className).Properties
for i=1:1:properties.Count() {
set property = properties.GetAt(i)
set propList = propList_$lb(property.Name)
set descrList = descrList_$lb(property.Description)
}
}
/// キャメルケースのメトリック名を小文字のアンダースコア名に変換します
/// 例: 入力 = WriteDaemon、出力 = _write_daemon
ClassMethod camelCase2Underscore(metrics As %String) As %String
{
set result = metrics
set regexp = "([A-Z])"
set matcher = ##class(%Regex.Matcher).%New(regexp, metrics)
while (matcher.Locate()) {
set result = matcher.ReplaceAll("_"_"$1")
}
// 小文字にします
set result = $zcvt(result, "l")
// _e_c_p (_c_s_p) を _ecp (_csp) にします
set result = $replace(result, "_e_c_p", "_ecp")
set result = $replace(result, "_c_s_p", "_csp")
quit result
}
}
コンソールを使用して、私たちの作業が無駄ではなかったことを確認しましょう(curl がプログレスバーの表示を邪魔しないように --silent キーを追加しました)。
# curl --user PromUser:Secret --silent -XGET 'http://localhost:57772/metrics/cache' | head -20# HELP isc_cache_dashboard_application_errors Number of application errors that have been logged.isc_cache_dashboard_application_errors 0# HELP isc_cache_dashboard_csp_sessions Most recent number of CSP sessions.isc_cache_dashboard_csp_sessions 2# HELP isc_cache_dashboard_cache_efficiency Most recently measured cache efficiency (Global references / (physical reads + writes))isc_cache_dashboard_cache_efficiency 2378.11# HELP isc_cache_dashboard_disk_reads Number of physical block read operations since system startup.isc_cache_dashboard_disk_reads 15101# HELP isc_cache_dashboard_disk_writes Number of physical block write operations since system startupisc_cache_dashboard_disk_writes 106233# HELP isc_cache_dashboard_ecp_app_srv_rate Most recently measured ECP application server traffic in bytes/second.isc_cache_dashboard_ecp_app_srv_rate 0# HELP isc_cache_dashboard_ecp_data_srv_rate Most recently measured ECP data server traffic in bytes/second.isc_cache_dashboard_ecp_data_srv_rate 0# HELP isc_cache_dashboard_glo_refs Number of Global references since system startup.isc_cache_dashboard_glo_refs 288545263# HELP isc_cache_dashboard_glo_refs_per_sec Most recently measured number of Global references per second.isc_cache_dashboard_glo_refs_per_sec 273.00# HELP isc_cache_dashboard_glo_sets Number of Global Sets and Kills since system startup.isc_cache_dashboard_glo_sets 44584646
これで、Prometheus のインターフェースで同じ内容を確認できるようになりました。
以下は上記メトリックのリストです。
これらのメトリックの Prometheus での表示内容については詳述しません。 必要なメトリックを選択して「Execute」ボタンをクリックしてください。 「Graph」タブを選択すると、グラフが表示されます(キャッシュの効率が表示されます)。
メトリックの視覚化
メトリックを視覚化するため、Grafana をインストールしましょう。 この記事では、tarball からインストールすることにしました。 ただし、パッケージからコンテナまで、他のインストール方法もあります。 次の手順を実行してみましょう(/opt/grafana フォルダーを作成し、そこに切り替えた後)。
とりあえず設定は変更せずにそのままにしておきましょう。 最後のステップでは、Grafana をバックグラウンドモードで起動します。 Prometheus の場合と同じように、Grafana のログをファイルに保存します。
# ./bin/grafana-server > /var/log/grafana.log 2>&1 &
デフォルトでは、3000 番ポートで Grafana の Web インターフェースにアクセスできます。 ログイン/パスワードは、admin/admin です。
詳細な Prometheus と Grafana の連携手順については、こちらを参照してください。 簡単に言えば、Prometheus タイプの新しいデータソースを追加する必要があります。 また、次のように direct/proxy アクセスのオプションを選択してください。
完了後、必要なパネルを含むダッシュボードを追加する必要があります。 ダッシュボードのテストサンプルは、メトリック収集クラスのコードと共に公開されています。 ダッシュボードは Grafana に簡単にインポートできます([Dashboards] → [Import])。
インポート後、次のようになります。
ダッシュボードを保存します。
時間範囲と更新間隔は右上で選択できます。
監視種類の例
グローバルへの呼び出しの監視をテストしてみましょう。
USER>for i=1:1:1000000 {set ^prometheus(i) = i}USER>kill ^prometheus
以下のグラフでは、1秒あたりのグローバルへの参照数が増加してキャッシュ効率が低下していることが分かります(^Prometheus グローバルがまだキャッシュされていない)。
ライセンスの使用状況を確認しましょう。 そのためには、次のように PromTest.csp というプリミティブな CSP ページを USER ネームスペースに作成しましょう。
監視は正常に機能しています!
そして、何度もアクセスしてください(/csp/user アプリケーションがパスワード保護されていないことを想定しています)。
# ab -n77 http://localhost:57772/csp/user/PromTest.csp
ライセンスの使用状況について、次の図が表示されます。
まとめ
ご覧のとおり、監視機能の実装はまったく難しくありません。 いくつかの初期手順を実行しただけでも、ライセンスの使用状況、グローバルキャッシュの効率、アプリケーションエラーなど、システムの動作に関する重要な情報を取得できます。 このチュートリアルでは SYS.Stats.Dashboard を使用しましたが、SYS / %SYSTEM / %SYS パッケージの他のクラスも注目に値します。 また、特定タイプのドキュメントの数など、独自アプリケーションのカスタムメトリックを提供する独自のクラスを作成することもできます。 いくつかの有用なメトリックは、最終的に Grafana 用の個別テンプレートにコンパイルされます。
今後の予定
本件についてより詳細な情報が必要な場合は、このテーマを詳しく説明するつもりです。 以下に私の予定を記しておきます。
ログデーモンのメトリックを含む Grafana テンプレートの準備について。 ^mgstat と同等の、少なくともそのメトリックに対応した何らかのグラフィカルツールを作成するのが望ましいと考えています。
Web アプリケーションのパスワード保護は優れていますが、証明書を使用できる可能性を確認するのが望ましいと考えています。
Prometheus、Grafana、および Prometheus を Docker コンテナとしてエクスポートするツールの使用について。
新しい Caché インスタンスを Prometheus の監視リストに自動追加するための検出サービスの使用について。 また、Grafana とそのテンプレートの利便性を(実際に)説明したいと考えています。 これは、選択した特定のサーバーのメトリックがすべて同じダッシュボードに表示される動的なパネルのようなものです。
Prometheus Alertmanager について。
データの保存期間に関連する Prometheus の構成設定、および多数のメトリックと短い統計収集間隔を持つシステムに考えられる最適化について。
途中で発生するさまざまで微妙な差異について。
リンク
この記事を準備中にいくつかの有益なサイトにアクセスし、次のようなたくさんの動画を視聴しました。
Prometheus プロジェクトの Web サイト
Grafana プロジェクトの Web サイト
Brian Brazil という Prometheus 開発者のブログ
DigitalOcean のチュートリアル
Robust Perception の動画数点
Prometheus を対象とする多数のカンファレンス動画
最後までお読みいただき、ありがとうございました!
監視ツールのことで申し訳ございませんが、興味があり質問があるのでお教えいただけないでしょうか。
・このツールは無料なのでしょうか? もしくは有料でしょうか?
・Cache'やEnsembleを監視できるということですが、CPU、メモリ、DISK、その他サービスの監視などもできるのでしょうか? (例えばEnsembleのメッセージログでDISKいっぱいになる前に知りたい)
・閾値を設定しそれを超えた場合は、管理者にメール送信することなども可能でしょうか?
・Cache'やEnsembleが動作しているサーバーとは別のサーバーから監視するのか、もしくは同じOSにインストールして監視するのでしょうか?
・Cache'やEnsembleの監視の動作実績はありますでしょうか? またIRISを監視対象にすることもできるのでしょうか?
よろしくお願いします。 ありがとうございます。Prometheousはフリーソフトでシステムの監視を行うソフトウェアで、RESTインターフェースを使ってJson形式で監視データをやり取りしています。アーキテクチャは(https://prometheus.io/docs/introduction/overview/#architecture)を参照ください。
基本的に監視サーバから監視対象サーバのExporterにアクセスし、監視データを取得する仕組みになっており、閾値を超えるとAlert Managerに通知され、メールやSlackなど様々な通知が行えるようになっています。また、grafanaという視覚化(グラフ表示等)ツールを使って推移を確認することもできます。
監視データの取得については仕様に基づいて様々なハードウェア、OS、ミドルウェアの監視データを提供するExporterが公開されています。(https://prometheus.io/docs/instrumenting/exporters/)この記事ではCacheやEnsembleのRESTインターフェースでExporterを作成していますが、IRISは標準でPrometheousの監視データを提供する機能が備わっています。InterSystemsではPrometheousやGrafanaの機能を使用したInterSystems SAMを公開しており、簡単な設定でIRISを監視できるようにしています。以下の記事もご確認頂ければと思います。InterSystems System Alerting and Monitoring (SAM)を使ってみました!よろしくお願いします。 早速のご回答、ありがとうございました。
やりたいことは出来ると思いました。