この記事は、Signal0neのプロジェクトメンテナーであるSzymon Stawskiと共同で執筆されました。
このシナリオを考えてみましょう:Dockerコンテナを起動し、APIエンドポイントにアクセスし、...バム! 失敗します。 さて何ですか。 通常のドリルでは、コンテナログに飛び込み、スクロールしてエラーメッセージを理解し、何が問題なのかを理解するのに役立つ手がかりを探すことに時間を費やします。 しかし、コンテナで何が起こっているのか、すでに提供されている提案されたソリューションの潜在的な問題の概要を把握できるとしたらどうでしょうか。
この記事では、AIを使用してこの問題を解決するソリューションについて詳しく説明します。 AIはすでに開発者がコードを書くのを助けることができるので、開発者がシステムを理解するのにも役立ってみませんか?
Signal0neは、Dockerコンテナの状態をスキャンしてログを記録し、問題を探し、発見された問題を分析し、開発者のデバッグに役立つ洞察を出力する Docker Desktop 拡張機能です。 Signal0ne は、2023 Docker AI/ML Hackathon で優勝した作品として初めて知ったので、それを使用してより効率的にデバッグする方法をお見せできることを嬉しく思います。
Signal0とDocker拡張機能の紹介:Dockerのデバッグの合理化
Signal0ne Docker拡張機能の魔法は、コンテナ化されたアプリケーションを操作および開発するためのフィードバックループを短縮する機能です。無限のログダイビングは忘れてください — 拡張機能は、ログと状態がAIエージェントによって分析された後、コンテナ内で何が起こっているかを明確かつ簡潔に要約し、潜在的な問題を特定し、解決策を提案します。
最近のアプリケーションの開発には、孤立した状態で実行されるコードブロック以上のものが含まれます。 これは依存関係の複雑なシステムであり、時々デバッグが必要なさまざまなユーザー フローです。 AIは、すべてのシステムノイズをフィルタリングし、システム内の特定の問題に関するデータを提供することに重点を置いているため、開発者はより迅速かつ適切にデバッグできます。
Docker Desktop は、巨大なコミュニティを持つローカル開発に使用される最も人気のあるツールの 1 つであり、 Docker Debug などの Docker 機能は、コンテナー化されたアプリの問題を迅速にデバッグして解決するコミュニティの機能を強化します。
Signal0ne Docker拡張機能の提案されたソリューションと要約は、コンテナのデバッグやコードの編集に役立つため、ソフトウェアエンジニアとして価値をもたらすことに集中できます。 「開発者エクスペリエンス」という用語がよく使用されますが、この拡張機能は、開発時間の短縮という 1 つの重要な側面に焦点を当てています。 これは生産性の向上に直結し、コンテナ化されたアプリケーションをより迅速かつ効率的に構築できます。
Docker Desktop 拡張機能はどのように機能しますか?
コードの記述を支援するIDEに高度に統合されたAI副操縦士と、ソフトウェア開発の概念をQ&A形式で理解するのに役立つブラウザAIチャットの間には、ログとランタイムシステムデータという1つのピースが欠けています。
Signal0ne Docker Desktop 拡張機能は、ユーザーのローカル システム (UI とエージェント) でホストされている 2 つのコンポーネントと、クラウド バックエンド サービス0Signal でホストされている 1 つの 3 つのコンポーネントで構成されています。 エージェントは、無効な状態、ランタイムの問題、またはログ内の警告やエラーがあるコンテナを検索するためにユーザーのローカル環境をスキャンし、問題の検出後、コンテナ定義から追加データを収集して分析を強化します。
Signal0ne エージェントの検出後、データはバックエンド サービスに送信され、そこで事前トレーニング済みの LLM とソリューション検索検索サービスの組み合わせが分析を実行します。 問題の分析は、次のような Signal0ne 拡張機能 UI から確認できます。
- 短いログの概要 — 分析の基となったログなど、特定のコンテナ内で何が起こっているかを概説し、必要に応じてソースドロップダウンからアクセスできます。
- 解決策の概要 — 分析された問題に対する可能な解決策に関する 1 つの段落と、この特定の解決策が提案された理由の説明。
- ソリューション ソース — コミュニティによって問題が既に解決されている Web サイトへのリンク (GitHub の問題や StackOverflow の投稿など)。
詳細については、この短いビデオデモをご覧ください。
技術的な詳細
問題分析パイプラインは、オープンソースのMistral 7b LLMとLLMに最適化されたWeb検索を利用して、オープンWeb上の既存のソリューションのソースを閲覧するLangChainツールフレームワークを利用しています(図 1)。
次のセクションでは、問題分析パイプラインの出力例を示します。
Dockerコンテナからのログ:
“$ irb\n>> \"12341:asdf\"[/\\d+/]\n# => \"12341\" \n>> \"12341:asdf\"[/\\d*/]\n# => \"12341\" \n>> \"12341:asdf\"[0..5]\n# => \"12341:\" \n>> \"12341:asdf\"[0...5]\n# => \"12341\" \n>> \"12341:asdf\"[0, ':']\nTypeError: can't convert String into Integer\n from (irb):5:in”
概要:
ユーザーは、次のようなさまざまな Ruby メソッドを使用して、[/\\\\d+/], [/\\\\d\\\\*/], [0..5], [0...5], and [0, ':']
文字列12341:asdf
から部分文字列を抽出しようとしています。ただし、インデックス作成メソッド [0, ':'],
を使用しようとすると、メソッドが整数の引数を期待しているが、代わりに文字列を受け取るため、エラーが発生します。
予測される解決策:
"インデックス作成メソッドの使用時にエラーを発生させずに、指定された文字列 12341:asdf
から部分文字列を抽出するには、次のオプションを検討してください。
1. 正規表現の使用:
正規表現を使用して部分文字列を抽出するには、正規表現パターンでメソッドを使用できます scan
。 たとえば、コロンの前の数字を抽出するには、次のコードスニペットを使用できます。
str = "12341:asdf"
substring = str.scan(/[\\\\d]+/)
puts substring.first
# Output: ["12341"]
puts substring.first[0]
# Output: 12341
2. スライス:
インデックス作成の別の代替手段として、文字列から指定した範囲の文字を抽出できるスライスがあります。 スライスを使用してコロンの前の数字を抽出するには、次のコードスニペットを使用できます。
str = "12341:asdf"
substring = str[0...str.index(":")]
puts substring
# Output: "12341"
puts substring.to_i
# Output: 12341
これら 2 つのメソッドは、エラーを発生させることなく、指定された文字列から目的の部分文字列を抽出するのに役立ちます。
はじめ
Signal0およびDockerDesktop拡張機能の使用を開始するのは、開発者が統合開発の利点を活用できるようにする簡単なプロセスです。
Signal0Docker拡張機能をインストールする手順は次のとおりです。
2. 左側のサイドバーで [ 拡張機能の追加 ] を選択します。 [ Browse ](参照)タブがデフォルトで表示されます(図 2)。
3. [ フィルター] ドロップダウンで、[ ユーティリティ ツール ] カテゴリを選択します。
4. [Signal]0[ne]を見つけて、[ インストール ]を選択します(図 3)。
5. 拡張機能のインストール後にログインします(図 4)。
6. アプリの開発を開始し、デバッグ中に問題が発生した場合は、拡張機能のUI0Signalを確認してください。 問題分析は、デバッグに役立ちます。
Signal0neエージェントがオンに切り替えて有効になっていることを確認します(図 5)。
図 6 に、概要とソースを示します。
提案されたソリューションとソースを図 7 と図 8に示します。 ソリューション ソースは、予測されたソリューションを含む Web ページにリダイレクトします。
プロジェクトに貢献したい場合は、課題分析出力の [いいね] または [嫌い] ボタンからフィードバックを残すことができます (図 9)。
コンテナを利用せずにSignal0Docker Desktop拡張機能を調べるには、これ docker compose
を使用してダミーコンテナを試し、ログがどのように分析されているか、出力が分析情報にどの程度役立つかを確認することを検討してください。
services:
broken_bulb: # c# application that cannot start properly
image: 'Signal0neai/broken_bulb:dev'
faulty_roger: #
image: 'Signal0neai/faulty_roger:dev'
smoked_server: # nginx server hosting the website with the miss-configuration
image: 'Signal0neai/smoked_server:dev'
ports:
- '8082:8082'
invalid_api_call: # python webserver with bug
image: 'Signal0neai/invalid_api_call:dev'
ports:
- '5000:5000'
- broken_bulb:このサービスは、画像
Signal0neai/broken_bulb:dev
を使用します。 これは、起動時に System.NullReferenceException をスローする C# アプリケーションです。 そのアプリケーションのおかげで、Signal0が障害が発生したコンテナを発見し、エラーログを抽出して分析する方法を観察できます。 - faulty_roger:このサービスは、画像
Signal0neai/faulty_roger:dev
を使用します。 これは、localhost上の到達不能なデータベースに接続しようとしているPython APIサーバーです。 - smoked_server:本サービスでは、画像
Signal0neai/smoked_server:dev
を利用します。 このsmoked_server
サービスは、ユーザーがルートパスにアクセスしようとしているときに 403 禁止されている http://127.0.01:8082/)をスローしているNginxインスタンスです。 Signal0neは、それをデバッグするのに役立ちます。 - invalid_api_call: エンドポイントの 1 つにバグがある API サービスで、エラー呼び出しを生成します http://1270.0.1: コンテナーの実行後に /create-table5000。シグナル0の分析に従って、問題のデバッグを試みます。
結論
コンテナ化されたアプリケーションのデバッグは、時間と手間がかかり、多くの場合、ログを延々とスクロールし、問題を理解するための手がかりを探す必要があります。 ただし、Signal0の導入により、Docker拡張機能により、開発者はこのプロセスを合理化し、生産性を大幅に向上させることができます。
この拡張機能は、AI と言語モデルの力を活用することで、コンテナー内で何が起こっているかを明確かつ簡潔に要約し、潜在的な問題を特定し、解決策を提案します。 ユーザーフレンドリーなインターフェイスとDocker Desktopとのシームレスな統合により、Signal0およびDocker拡張機能は、開発者がコンテナ化されたアプリケーションをデバッグおよび開発する方法を変革するように設定されています。
熟練したDockerユーザーでも、コンテナ化された開発を始めたばかりの場合でも、この拡張機能は、デバッグの数え切れないほどの時間を節約し、最も重要なこと、つまり高品質のアプリケーションを効率的に構築することに集中できる貴重なツールを提供します。 今すぐ Docker Desktop で拡張機能を試し、 GitHub のドキュメントを確認してください。
さらに詳しく
- Docker Newsletter を購読してください。
- Docker デスクトップの最新リリースを入手します。
- 次のものに投票してください! 公開ロードマップをご覧ください。
- 質問がありますか? Docker コミュニティがお手伝いします。
- ドッカーは初めてですか? 始めましょう。
フィードバック
「より良いデバッグ:Signal0neDocker拡張機能がAIを使用してコンテナのトラブルシューティングを簡素化する方法」に関する0の考え