Redisでログ分析を強化するアプリケーションの構築方法を徹底解説
ITインフラが大規模化し複雑になるにつれて、すべてを適切に管理することにますます多くの手間をかけることになります。
特にクラウドの普及以降、技術情報がさまざまな場所に散在するようになり、この傾向は一層顕著になっています。
しかし、包括的なログ分析を実行できるようにするのは、面倒で時間がかかり、ひどく退屈な作業でもあります。
この負担から解放されるシンプルかつ効果的な方法のひとつが、ログ監視を容易にするために設計されたソフトウェアやアプリケーションの活用です。Alexis Gardin氏が開発したアプリケーション「Logub」は、まさにそのためのツールです。
他の多くのSaaSソリューションとは異なり、Logubはオンプレミス環境で動作するオープンソースです。以下の手順に従えば、アプリケーションログの収集・探索・分析を自動的に行うアプリケーションを構築できます。
このアプリケーションの核心となっているのは、RediSearchの機能です。RediSearchは、さまざまな場所に分散したログを比類のない効率性で探索・分析することを可能にします。ここでは、Alexis氏がどのようにこのアプリケーションを組み上げたのかを見ていきましょう。
本題に入る前に、Redis Launchpadでは他にも魅力的なアプリケーションが多数公開されているので、ぜひチェックしてみてください。
- 何を作るのか?
- 必要なものは?
- アーキテクチャ
- はじめに
- データの保存方法
- データのクエリ方法
- 検索バーの仕組み
- プロジェクトへのLogubの統合方法
- まとめ
1. 何を作るのか?
Redisを基盤として、アプリケーションログの収集・分析・探索を行う特別なアプリを構築します。以下の手順では、このアプリケーションの構築に必要な要素をAからZまで、必要なコンポーネントとともに解説していきます。
Redisが初めての方でもご安心ください。この強力なデータベースの扱い方を丁寧にご紹介します。さあ、始める準備はできましたか?
それでは、早速始めましょう。
2. 必要なものは?
- Fluentd: ログ処理のためのクロスプラットフォーム対応オープンソースデータコレクターとして使用します。
- Fluentd用Redis出力プラグイン: fluent-plugin-redisは、Redisへ出力するためのFluentdプラグインです。
- Docker: 開発者がアプリケーションをコンテナにパッケージングするためのプラットフォームとして使用します。
- Docker Compose: マルチコンテナのDockerアプリケーションを定義・実行するために使用します。
3. アーキテクチャ
- Fluentdが各種宛先にわたるすべてのアプリケーションからログを収集します。
- Fluentdが各ログをフォーマットし、保存のためにRedisへ送信します。
- データはFluentd Redisプラグイン(Redisへ出力するFluentdプラグイン)を使って保存されます。
- Logubバックエンドにより、RediSearchがユーザー定義のフィールドに対して全文検索とインデックス作成を実行できます。
4. はじめに
デモでは、DEMOアプリがLogubにログを発行します。このDEMOアプリを操作して自分のログを生成し、その後Logubでそれらを検索できるようになります。
前提条件
- Docker
- Docker Compose
まず、システム上で次のポートが開いていることを確認してください:8080、8081、3000、6379。
ステップ1: リポジトリをクローンする
git clone https://github.com/redis-developer/logub
ステップ2: DEMOアプリを起動する
- /demoフォルダに移動します(cd ./demo)
- 指定のコマンドでdocker-composeを起動します
Logubデモの起動
localhost:3000にアクセスしてログを探索しましょう。
ログが表示されるまで1分ほどかかる場合があります。右側のサイドバーでフィルタリングしながらページ上でログを確認できます。あるいは、上部の検索バーからフィルタ条件や全文検索クエリでログを検索することも可能です。
ログをクリックすると詳細が表示され、ビジネスプロパティをインデックス登録するオプションも利用できます。これらのビジネスプロパティは、後でフィルタとして使用できます。
次に、localhost:3000/demoにアクセスしてプレイグラウンドを開き、独自のログを追加してみましょう。このデモページでは以下のことが可能です。
- デモ用のフェイクアプリ内に架空のユーザーを作成し、その様子をログで確認する。
- システムに自分のログを発行する。
メインページに戻れば、先ほど生成したログを検索して試すことができます。
注意: コンテナ内でログが生成されてからLogubに表示されるまでには、約1分程度の遅延があります。これは、ログの収集・フォーマット・データベースへの取り込みという一連の処理によるものです。
5. 仕組みはどうなっているのか?
データの保存方法
データはFluentd Redisプラグインを使って保存されます。各ログはHSETコマンドで格納されます。例:HSET level DEBUG message "Hello World" thread main
データのクエリ方法
これは、ログを操作しRedisから取得するために使用するオブジェクトです。この操作によって、Logub UIがログを表示できるようになります。ログに対して複雑なクエリを実行するには、RediSearchを利用します。
RediSearchのスキーマは動的に変更できるため、「List」データ構造を使って、どのスキーマがインデックス登録されているかを追跡できます。
上記のコマンドにより、ユーザーの入力に基づいたプレーンテキストのRediSearchクエリを作成できます。RediSearchライブラリの上に構築された多数の小さなQueryBuilderがあります。Logub UIが送信するのも同じコマンドであり、これによってログ全体を効率的かつ包括的に検索できます。
ステップ2: 検索バーの使い方
タグによる検索と全文検索の両方が可能です。行き詰まったときの参考として、いくつか例を紹介します。
- env:dev Ut ea vero voluptate* … dev環境のログの中から、「Ut ea vero voluptate」で始まるメッセージを持つすべてのログを検索します。
- -env:prod Ut ea vero voluptate* … prod以外のすべての環境のログから、「Ut ea vero voluptate」で始まるメッセージを持つすべてのログを検索します。
- originRequest:France originRequest:USA … originRequestフィールドの値がFranceまたはUSAであるすべてのログを検索します。
- "dog" "cat" … 「dog」と「cat」の両方の単語を含むすべてのログを検索します。
- -"dog" "cat" … 「dog」を含まず「cat」を含むすべてのログを検索します。
アプリでのテスト体験を最大限に活かすため、プレイグラウンドで独自のログを作成し、ビジネスプロパティを追加したうえで、いろいろと試してみることを強くおすすめします。
ステップ3: プロジェクトへのLogubの統合方法
Logubの動作に必要なDockerイメージの一覧:
- ログを収集してRedisへ送信するLogub Fluentdイメージ – Logub Fluentd Image
- RediSearchモジュール付きのRedisイメージ – Redis Mod Image
- ログ探索機能を提供するLogubコントローラーイメージ – Logub Controller Image
- ログの探索・クエリを行うLogub UI – Logub UI Image
Logubのログフォーマット
現時点では、Logubが対応しているのは特定のログフォーマットのみです。将来的には、このフォーマットは拡張され、よりカスタマイズしやすくなる予定です。
Logubフォーマットは以下の通りです。
なお、これらのフィールドは必須ではありません。
ビジネスプロパティを追加したい場合は、キーとして「mdc」を持つネストされたJSONオブジェクトを追加する必要があります。例:
Logubへのログ発行
Loghubでログを探索するには、コンテナがDocker Fluentdロギングドライバーを使用している必要があります。カスタム統合のための設定例を以下に示します。
ステップ4: LogubにおけるRedisの設定
RediSearch
Logubは、アプリケーションログの処理にRediSearchの機能を利用しています。ログがRedisデータベースに永続化される際には、3種類のフィールドが付与されます。
- システムプロパティ: DockerとFluentdがログ送信時に提供する情報(環境、コンテナ名など)です。
- 基本プロパティ: ログが本来持つ基本情報(タイムスタンプ、サービスなど)です。これらのプロパティはRediSearchに自動的にインデックス登録されます。
- ビジネスプロパティ: Logubユーザーが特定のフィールドで指定する情報です。ユーザーはKey-Value(Map)形式に従う必要があります。RediSearchの高度な機能のおかげで、これらの「ビジネスプロパティ」をインデックス登録し、検索対象にすることができます。
以下は、Fluentdがログをフラット化してRedisデータベースに永続化する際に、本ツールがどのように機能するかを示すログの例です。Logub APIにより、ユーザーや企業はmdcオブジェクトの一部またはすべてのフィールドをインデックス登録できます。
このプロジェクトでは、Tagデータ型が広く使われています。ログ検索では、ビジネスプロパティ(顧客IDなど)をキーに検索することが多いためです。さらに、ログメッセージにはTextFieldデータ型を使用しています。これにより、ユーザーはこのフィールドに対して全文検索を実行できます。
検索プロセスの簡略化したスキーマは以下の通りです。
Redis
Redisは、Fluentdによってログを保存するために使用され、RedisのHashSet型で格納されます。
また、ユーザーがインデックス登録したフィールドを追跡するために、RedisのList型を使用する「schema」オブジェクトを追加することもできます。
まとめ: RediSearchで雑然としたログ管理を一変させる
クラウドのようなデジタルイノベーションの爆発的な普及には欠点もあります。それは、ITインフラの監視が複雑になることです。アプリケーションがさまざまな場所に散在しがちなため、すべてのログをひとつの場所に集めることが困難になります。
しかし、Redisを活用すれば、この単調な作業から解放され、ログの検索・収集・保存を簡単に行えるようになります。このアプリケーションがどのように作られたのか、その詳細をもっと知りたい方は、Alexis氏のYouTube動画をご覧ください。
また、LaunchpadではAlexis氏のような才能あるプログラマーによって開発された、革新的なアプリケーションが多数公開されています。ぜひチェックして、インスピレーションを得て、Redisを使ってどんなイノベーションを生み出せるか考えてみてください。
このアプリケーションを開発したのは誰?
Alexis Gardin
Alexisは現在Zendocに勤める革新的なソフトウェアエンジニアです。彼のGitHubページを見て、他にどんなプロジェクトに携わっているかチェックしてみましょう。
-
PCでiOSアプリを実行する方法|おすすめiOSエミュレーター10選
iPhoneは性能が高い一方で価格も高く、「手が出せない」と感じている方は少なくありません。iPhoneには魅力的なアプリが数多くありますが、本体を持っていなければその魅力を味わえないのが現状です。しかし、実はPCに「iOSエミュレーター」を導入すれば、iPhoneを購入しなくてもiOSアプリを体験できるのです。エミュレーターを使えば、大きめの画面でiOSアプリを操作でき、多くのツールが無料で利用可能です。この記事では、PCでiOSアプリを動かすためのおすすめエミュレーターを厳選してご紹介します。各ツールのダウンロードリンクも記載しているので、自分に合ったものを見つけてぜひ試してみてください。
-
Power Automateを使ってMicrosoft Teamsのステータスを自動更新する方法
Microsoft Teamsのステータスを自動的に切り替えられるようになると、在宅勤務中でもPCに縛られた感覚が薄れ、仕事のリズムにメリハリがつきます。もちろんTeamsアプリを開いて手動でステータスを変更することもできますが、アプリを開かずにステータスを更新できたら、もっと便利だと思いませんか? Power AutomateはMicrosoft 365向けに設計されたツールで、タスクやワークフローを自動化することで時間の節約を実現します。「フロー」と呼ばれるワークフローを作成・自動化したことがない方でも心配はいりません。人気アプリ向けのテンプレートが多数用意されているためです。 ステータス