Skip to content

Commit

Permalink
some improvements to the logs and README.
Browse files Browse the repository at this point in the history
  • Loading branch information
tukaelu committed Dec 10, 2023
1 parent 85dd6b7 commit 337dead
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 36 deletions.
64 changes: 33 additions & 31 deletions README-ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,9 @@

![](./images/ikesu-logo.png)

:construction: **このリポジトリは開発中のため実用には耐えません** :construction:

## 概要

Mackerelで管理しているホストのメトリックの一定時間以上の途絶を検知して、チェック監視結果としてアラート通知します。
通常は死活監視(Connectivity)により提供される機能ですが、このツールではクラウドインテグレーションやカスタムメトリックのような死活監視の対象とならない任意のメトリックの途絶の検知を目的としています。

なお、次のような特徴があります。

- 通常のコマンドして動作します。チェック監視プラグインとしては使用できません。
- cronやAWS Lambdaなどから定期的に実行されることを想定しています。
- YAMLで指定したサービス・ロールに所属する任意のホストをチェックします。
- Mackerelのホスト管理のプラクティスに則ることで、監視ルールの管理がとても楽になります。
- サービス・ロールに所属するホストのうち、チェック対象を特定のプロバイダー(EC2やRDSなどの各種クラウド製品)に限定できます。
- 一部のプロバイダーを除き、検証するメトリック(固定値)が自動的に決定されます。
- 確実性は低いです。[注意](#注意)をご確認ください。
- もちろん任意のメトリックを追加してチェックできます。その場合は複数のメトリックのうち、いずれかが投稿されていればOKとなります。
- 現在から過去最大30日まで遡ってチェックできます。デフォルトでは24時間以上の途絶があるとアラートが発報します。
- 通知はCRITICALアラートのみです。WARNINGからCRITICALにアラートレベルが変わるような段階的な通知には非対応です。
- サービスメトリックの途切れ監視はサポートしません。

細やかな設定やサービスメトリックの途切れ監視が必要な場合は [mackerelio-labs/check-mackerel-metric](https://github.com/mackerelio-labs/check-mackerel-metric) の使用をオススメします。
ikesuは[Mackerel](https://mackerel.io/)による監視運用をちょっと便利にするCLIツールです。サブコマンドで機能を提供します。

## インストール方法

Expand Down Expand Up @@ -62,14 +43,19 @@ GLOBAL OPTIONS:
--version, -v print the version
```

- MackerelのAPIキーの指定が必要です。いずれかの方法で指定してください。
- 実行にはMackerelのAPIキーの指定が必要です。いずれかの方法で指定してください。
- `MACKEREL_APIKEY`もしくは`IKESU_MACKEREL_APIKEY`の環境変数に指定する。
- `-apikey`オプションで指定する。
- Mackerel APIのエンドポイントを変更する場合は、いずれかの方法で変更できます。
- `MACKEREL_APIBASE`もしくは`IKESU_MACKEREL_APIBASE`の環境変数に指定する。
- `-apibase`オプションで指定する。

### check
## サブコマンド

### check - メトリックの途絶検知

Mackerelで管理しているホストのメトリックの一定時間以上の途絶を検知して、チェック監視結果としてアラート通知します。
通常は死活監視(Connectivity)により提供される機能ですが、このツールではクラウドインテグレーションやカスタムメトリックのような死活監視の対象とならない任意のメトリックの途絶の検知を行います。

```
NAME:
Expand All @@ -85,7 +71,22 @@ OPTIONS:
--help, -h show help
```

コマンドラインでの実行方法は次のようになります。
次のような特徴があります。

- `--config`で指定した設定ファイルに定義された、サービス・ロールに所属するホストをまとめてチェックします。
- Mackerelのホスト管理のプラクティスに則ることで、監視ルールの管理がとても楽になります。
- サービス・ロールに所属するホストのうち、チェック対象を特定のプロバイダー(EC2やRDSなどの各種クラウド製品)に限定できます。
- cronなどから定期的に実行されることを想定して動作します。チェック監視プラグインとしては使用できません。
- 一部のプロバイダーを除き、検証するメトリック名(固定値)が自動的に決定されます。
- もちろん任意のメトリックを指定(追加)してチェックできます。その場合は複数のメトリックのうち、いずれかが投稿されていればOKとなります。
- 自動的に決定されるメトリックが確実に存在する保証はないため、明示的に指定することをオススメします。詳細は[注意](#注意)をよくご確認ください。
- 現在から過去最大30日まで遡ってチェックできます。デフォルトでは24時間以上の途絶があるとアラートが発報します。
- 通知はCRITICALアラートのみです。WARNINGからCRITICALにアラートレベルが変わるような段階的な通知には非対応です。
- サービスメトリックの途切れ監視はサポートしません。

細やかな設定やサービスメトリックの途切れ監視が必要な場合は [mackerelio-labs/check-mackerel-metric](https://github.com/mackerelio-labs/check-mackerel-metric) の使用をオススメします。

checkサブコマンドの実行方法は次のようになります。

```
# APIキーが環境変数 MACKEREL_APIKEY もしくは IKESU_MACKEREL_APIKEY に設定されている場合
Expand All @@ -96,9 +97,12 @@ ikesu check --conf s3://your_s3_bucket/check.yaml?regionHint=ap-northeast-1
# APIキーをオプションで指定する場合
ikesu -apikey <your api key> check --conf check.yaml
# プロバイダーの一覧と自動的にチェックするメトリック名を表示する
ikesu check --show-providers
```

## 設定方法
#### 設定方法

次のようなYAML形式で設定します。各項目については表を確認してください。

Expand Down Expand Up @@ -147,17 +151,15 @@ check:
- `agent-azurevm` (Azure VM)
- `agent-gce` (Google Complute Engine)

## 注意
#### 注意

- 自動的にメトリックが検知対象となるかはプロバイダーに依存します
- メトリック名の定義にワイルドカードを含まず、常時投稿されるメトリックをもつプロバイダーが対象です
- 定義されているものでも確実に投稿される保証はないので、自動的な決定に頼りすぎると誤報を招く場合もあることはご承知おきください
- メトリックを自動的に決定できるかはプロバイダーに依存します
- メトリック名の定義にワイルドカードを含まず、常時投稿されるようなメトリックをもつプロバイダーを対象としています
- 現在定義しているものでも確実に投稿される保証はないです。自動的な決定に頼りすぎると誤報を招く場合もあるのでご注意ください
- 必要に応じて`inspection_metrics`でメトリック名を直接指定してください。
- `--show-provider`オプションでプロバイダーごとの対応が確認できます。
- 次に該当する場合はチェックを行いません。
- ホストがmackerel-agent(`provider=agent`) かつ `inspection_metrics` が定義されていない場合はチェックしません。
- 通常であれば死活監視で検知されるからです。
- mackerel-container-agent(`provider=container-agent`) かつ `inspection_metrics` が定義されていない場合はチェックしません。
- ホストのプロバイダーがmackerel-agent(`provider=agent`)もしくはmackerel-container-agent(`provider=container-agent`)で、`inspection_metrics` が定義されていない場合はチェックをスキップします。
- サービス側の仕様変更により、本ツールが動作が不安定になったり仕様が変更となる場合があります。

## ライセンス
Expand Down
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@

![](./images/ikesu-logo.png)

:construction: **This repository is under development and is not suitable for practical use.** :construction:

Currently, a README is only provided in Japanese. An English version will be released soon.

[日本語版のREADME](README-ja.md)
12 changes: 9 additions & 3 deletions cmd/ikesu/subcommand/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ func (c *Check) Run(ctx context.Context) error {
c.Log.Error("Failed to retrieve the hosts.", "reason", err.Error())
return err
}
c.Log.Info("Retrieved target hosts", "count", len(hosts))
c.Log.Info("Retrieved target hosts.", "service", rule.Service, "roles", rule.Roles, "count", len(hosts))

for _, host := range hosts {
provider := getHostProviderType(host)
Expand Down Expand Up @@ -166,11 +166,13 @@ func (c *Check) Run(ctx context.Context) error {
provider,
strings.Join(metricNames, ", "),
)
} else {
message = fmt.Sprintf("No disruptions were detected in the metrics.")
}

report := &mackerel.CheckReport{
Source: mackerel.NewCheckSourceHost(host.ID),
Name: fmt.Sprint("Ikesu Check(", rule.Name, ")"),
Name: fmt.Sprint("Ikesu Check(rule=", rule.Name, ")"),
Status: status,
Message: message,
OccurredAt: checkedAt,
Expand All @@ -190,7 +192,11 @@ func (c *Check) Run(ctx context.Context) error {
// The Post Monitoring Check Reports API requires requests in batches of 100, so it is processed in segments.
// see. https://mackerel.io/api-docs/entry/check-monitoring#post
reportCount := len(reports)
c.Log.Info("Starting to report the check monitoring results.", "reports", reportCount)
if reportCount == 0 {
c.Log.Info("There were no results to report.")
} else {
c.Log.Info("Starting to report the check monitoring results.", "reports", reportCount)
}
for i := 0; i < reportCount; i += 100 {
end := i + 100
if reportCount < end {
Expand Down

0 comments on commit 337dead

Please sign in to comment.