遅いクエリ、予期しないエラー、その他の重要なログに関する通知を取得するための簡単な Go ヒント。
Slack ボットから、長時間実行されている SQL クエリについてのメッセージが表示されました。できるだけ早く直さなければなりません。
測定できないものを管理することはできません。すべてのバックエンド アプリケーションでは、データベース上のパフォーマンスを監視する必要があります。データ量の増加に伴って特定のクエリの速度が低下する場合は、速度が低下しすぎる前にクエリを最適化する必要があります。
Slack が私たちの仕事の中心となるにつれて、システムを監視する方法も変わりつつあります。私たちはすでに非常に優れた監視ツールを持っていますが、システム内の何かが減少傾向にあるかどうかを Slack ボットに知らせてもらうことも素晴らしいアイデアです。たとえば、SQL クエリの完了に時間がかかりすぎたり、特定の Go パッケージで致命的なエラーが発生したりします。
このブログ投稿では、この目標を達成するために、これらの機能と既存のデータベース ライブラリをすでにサポートしている単純なログ システムをセットアップする方法について説明します。
ロガーを使用するlogger は、Go ライブラリおよびアプリケーションで使用するために設計された小さなライブラリです。この例では、次の 3 つの重要な機能を使用します。
パフォーマンスを測定するためのシンプルなタイマーを提供します。
複雑な出力フィルターをサポートしているため、指定したパッケージからログを選択できます。たとえば、データベース パケットからのみ出力し、500 ミリ秒を超えるタイマー ログのみを出力するようにロガーに指示できます。
Slack フックを備えているため、ログをフィルタリングして Slack にフィードできます。
この例でタイマーを使用する方法を見てみましょう。後でフィルターも使用します:
リーリー
ロガーはデフォルトではサイレントであるため、ライブラリ内で使用できます。単に環境変数を使用してログを表示します。例:
リーリー
上記の例では、database@timer フィルターを使用して、データベース パッケージのタイマー ログ出力を表示しました。などの他のフィルターを試すこともできます。
LOG=*: すべてのログ
LOG=users@error,database: ユーザーからのすべてのエラー ログ、データベースからのすべてのログ
LOG=*@timer,database@info: すべてのパッケージからのタイマー ログとエラー ログ、およびデータベースからのすべてのログ
LOG=*,users@mute: users
を除くすべてのログ
上の例で何をしたか説明しましょう:
5 行目: 受信 Webhook URL を設定します。 URLはここにリンクされています。
行 #6: フロー ログのエントリ チャネルを選択します。
行 #7: 送信者のユーザー名が表示されます。
行 #11: ストリーム フィルターを使用して、200 ミリ秒より古いタイマー ログのみを出力します。
この例が一般的なアイデアを理解できることを願っています。さらに質問がある場合は、ロガーのドキュメントを参照してください。
実際の例: CRUD
お問い合わせ
これは、指定された電子メールのユーザー名を返す簡単なクエリです: リーリーわかりました、これは短すぎます。何かが欠けているように感じます。完全なコンテキストを追加しましょう:
リーリーつまり、環境変数 DATABASE_URL を介して MySQL データベースに接続された crud インスタンスがあります。このプログラムを実行すると、次の出力行が表示されます。 リーリー
前に述べたように、ログはデフォルトではサイレントです。 crud の内部ログを見てみましょう:リーリー
これは単純であり、開発環境でクエリがどのように実行されるかを確認するには十分です。CRUD と Slack の統合
ロガーは、アプリケーション レベルの「内部ログ システム」の構成管理用に設計されています。これは、アプリケーション レベルでロガーを設定することで、未処理のログを Slack に流入させることができることを意味します: リーリー 上記のコード内:
logger ライブラリと logger-slack-hook ライブラリをインポートしました。
ロガーのログが Slack に流れるように設定します。この構成は、サードパーティの依存関係を含む、コード ベースでのロガーのすべての使用をカバーします。
ストリーム フィルターを使用して、MySQL パッケージから 250 ミリ秒を超えるタイマー ログのみを出力しました。
この使用法は、スロー クエリのレポート以外にも拡張できます。私は個人的に、指定したパッケージの重要なエラーを追跡するために、また、新しいユーザーのログインや支払い生成ログなどの統計のためにこれを使用しています。
この記事で言及されているパッケージ
ロガー-スラックフック
ご質問やご提案がありましたらお聞かせください
以上がSlack 上で発生する SQL クエリの監視の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。