記事
· 2024年2月29日 6m read

Journal File Indexer (JP)

コミュニティの皆さん、こんにちは!

この記事では、私の最新のアプリケーションである Journal File Indexer をご紹介します。 このアプリケーションの開発は、ポータルアイデアの DPI-I-270 に基づいています。

簡単に言えば、このアプリケーションではデータベースでログファイルを読み込んでインデックス作成できます。

製作理由

管理ポータルでログファイルの検索機能を使用したことがあるなら、タイムアウトエラーになったり、ページが空になったりしたことがあるのではないでしょうか。 この問題は通常、大規模なジャーナルファイルを検索する場合に発生します。 Journal File Indexer は、ファイルをデータベースに読み込んで、検索速度を大幅に高めることで、この問題を解決します。

復元プロセス中にはもう 1 つの問題が発生します。 ログファイルでグローバルエントリを検索し、古い値または新しい値を復元したくても、管理ポータルにはこの特定の機能がありません。 そのため、これを達成するにはルーチンをコーディングする必要があります。 Journal File Indexer を使うと、この復元機能を統合できます!

アーキテクチャ

最新の開発標準を使用したため、このアプリケーションはフロントエンドの Angular、当然ながらバックエンドの ObjectScript、REST API、JWT 認証、および WebSocket で構成されています。

注意: サーバーサイドの REST API は OpenAPI-Suite を使って Swagger 仕様から生成されています。

ストレージについて

インデックス作成されたログデータは「一時データ」と見なされるため、デフォルトで IRISTEMP に保存されます。 この動作は、単純なグローバルマッピングによって簡単に変更可能です(次のセクションを参照)。

アプリケーションの実行

アプリケーションは 2 つあります。1 つはバックエンド用で、もう 1 つはフロントエンド用です。そのため、最も簡単な方法は Docker を使用することです。

Docker の使用

git clone https://github.com/lscalese/journal-file-indexer.git
cd journal-file-indexer
docker-compose up -d

# イメージを再作成する必要がある場合:
# docker-compose build --no-cache

そして、http://localhost:8090/login を開きます。

 

Docker 以外のユーザー

IPM を使ってバックエンドアプリケーションをインストールするには、以下のコマンドを実行します。

zpm "install journal-indexer"

フロントエンドの場合は、Web サーバーで "URL rewrite" モジュールと WebSocket 機能が有効であることを確認します。 コンパイルされた Angular アプリケーションは "dist" フォルダにあります。 "journal-indexer-ui" をホストするように Web サーバーインスタンスを構成します。事前にビルドされた Angular アプリケーションを使うと、暗黙的に Web ゲートウェイと同じ Web サーバーインスタンスにそれをホストしていることになります。

注意:  IIS ユーザーの場合、デフォルトの構成ファイルは、URL 書き換えルールと WebSocket が有効な状態で提供されます(web.config ファイルを参照)。

別の環境パラメーターを使ってフロントエンドアプリケーションをビルドし直す必要がある場合は、こちらのリポジトリにアクセスしてください。提供されているビルド済みバージョンでは、以下のコマンドが使用されています。

ng build --configuration=webgateway

独自の特定の要件に従って自由に新しい環境を作成し、アプリケーションをビルドできます。

機能

この記事にはすべての詳細な機能を含めてはいませんが、近日デモ動画を作成する予定です。 フロントエンドアプリケーションは、単純で使いやすく設計されています。

基本的に、Journal Indexer は、ダウンロード、インデックス作成、統計表示、検索、ログファイルからのデータの復元を行うための Web インターフェースを備えています。

「New」または「Load」メニューに移動して、ログファイルのインデックスを作成することから始め、そこから、利用できるその他のさまざまな機能を詳しくご覧ください。

以下は、スクリーンショットです。

 

   

Journal Indexer には、ターミナルアプリケーションも備わっています。

Do ^JRNINDEXER

このプロジェクトの主な焦点はターミナルアプリケーションを橋梁するものではありませんが、興味のある方は README.md ファイルで詳細をご覧ください。

注意事項

Journal File Indexer では IRISTEMP データベースを使ってデータを保存しています。インスタンスを再起動すると、インデックス作成されたデータは失われます。

ジャーナルファイルのインデックス作成には空き容量が必要で、たとえば、1 GB のサイズのジャーナルファイルの場合、IRISTEMP の最大 5GB が必要となることがあります。そのため、IRISTEMP ディスクに十分な空き容量を確保してください。

別のデータベースにデータを保存したい場合は、"^IRIS.Temp.data.*" にグローバルマッピングを作成できます。ミラー環境では、ミラーのデータベースを選択すると、ジャーナルファイルのインデックス作成によって大量のジャーナルレコードが生成されることに注意してください(IRISTEMP ではこの動作はありません)。

ディスクストレージの高使用率を回避するために、Journal Indexer はインデックス作成済みジャーナルを 5 個しか保持しません。6 番目ジャーナルをインデックス作成すると、最も古いものが自動的に IRISTEMP から削除されます。

この制限は、以下のクラスメソッドを使って調整できます。

; ex: to keep 7 indexed journals
Do ##class(dc.journalindexer.services.Config).SetMaxJournalRetention(7)

さらに、個人的な意見としては、この種のツールを実稼動システムに直接インストールするのはお勧めしません。 Journal File Indexer では外部ログファイルのアップロードを簡単に行えます。 このツールは、テストシステムで使用してから、必要に応じてデータをエクスポートすることをお勧めします。

プロジェクト環境について

この開発プロジェクトへの取り組みは、楽しくもありながら、チャレンジを要するものでもありました。 これは私が初めて Andular を使ってフロントエンドアプリケーションを作成したプロジェクトであったため、学習とプロジェクトのビルドの過程で多くのことが得られました。

バックエンド開発も、REST API の生成、インデックス作成の進捗を通知する Web ソケットの組み込み、カスタムクラスクエリの作成、ターミナルモードでインデックス作成の進捗を通信するための $SYSTEM.Event の使用、メモリ操作、カスタムストレージソリューションの実装、ユニットテスト、および Journal API の利用が伴い、同じようにやりがいのある作業ででした。

QuinielaML をご提供いただいた @Luis Angel Pérez Ramos(フロントエンドアプリケーションの類似部分が役立ちました)、レビューしていただいた @Dmitry Maslennikov、およびアイデアを実装する気にさせてくれた @Vadim Aniskin に感謝しています!

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください