背景
プロセス監視サービス関連のコンポーネントは、一般的に、早期ビジネス扱われるユーレカから組立ラインオフ別の後に医療サービスを検出するために失敗をもたらす、投与量を超えて使用されるDBリソース固有のサービスを表示さ、サービス監視は特定の時間内のノード、またはルーティングにルーティングされていません特定のノードへのが、組立ラインオフ次々ビジネス過渡通常のサービスを意味し、アラームしきい値を、トリガされませんシーンをヒットしませんでした。ユーレカサーバーレジストリサービスは、以前の登録ステータス、登録上の(いくつかのインスタンスにリンクされているインスタンスノードを認識できるようa)に示すように、ノードステータスシナリオ非-UP
監視プログラム
- ユーレカタイミング取得、登録情報、ノードの例として、ノード状態情報として
- 収集プロメテウス通常のデータ収集ユーレカサーバ
- grafanaのお問い合わせやアラームデータ
ユーレカ登録情報データの収集
メトリックデータ構造定義
-
統計ノードのステータス
タイプ:ゲージ
eureka_instance_status{client="{client}",status="{status}"}
クライアント:ユーレカクライアント・アプリケーション名
ステータス列挙
状態 | 列挙値 |
---|---|
アップ | 1 |
ダウン | 5 |
起動 | 2 |
故障中 | 3 |
UNKNOW | 4 |
平均値は、前回でnは1よりも大きい異常を示す警報を行います
-
ノード統計の数
タイプ:ゲージ
eureka_instance_count{client="{client}",count="{count}"}
クライアント:ユーレカクライアント・アプリケーション名
カウント:クライアント数
Javaのポンポン依存
<!-- boot2.x 兼容-->
<!-- The client -->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>0.6.0</version>
</dependency>
<!-- Hotspot JVM metrics-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_hotspot</artifactId>
<version>0.6.0</version>
</dependency>
<!-- Exposition HTTPServer-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_httpserver</artifactId>
<version>0.6.0</version>
</dependency>
<!-- Pushgateway exposition-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_pushgateway</artifactId>
<version>0.6.0</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
<version>1.1.4</version>
</dependency>
Javaコード
@Component
public class InstanceStateCollector {
@Autowired
PeerAwareInstanceRegistry registry;
private static final Logger log = LoggerFactory.getLogger(InstanceStateCollector.class);
@Scheduled(cron = "*/5 * * * * ?")
public void collect() {
Applications applications = registry.getApplications();
applications.getRegisteredApplications().forEach((registeredApplication) -> {
Integer count = registeredApplication.size();
String client = registeredApplication.getName();
log.debug("client :{}, count :{}", client, count);
PrometheusMetricsUtils.metricInstanceCount(client, count);
registeredApplication.getInstances().forEach((instance) -> {
String instanceId = instance.getInstanceId();
log.debug("client :{}, instance :{}, status :{}", client, instanceId, instance.getStatus());
PrometheusMetricsUtils.metricInstanceStatus(client, instanceId, instance.getStatus());
});
});
}
}
@Service
public class PrometheusMetricsService {
/**
* 实例状态统计
* eureka_instance_status{client="{client}",status="{status}"}
*/
private static final String EUREKA_INSTANCE_STATUS = "mall_eureka_instance_status";
/**
* 实例数量统计
* eureka_instance_count{client="{client}",count="{count}"}
*/
private static final String EUREKA_INSTANCE_COUNT = "mall_eureka_instance_count";
private static final String LABEL_CLIENT = "client";
private final Gauge instanceStatusGauge;
private final Gauge instanceCountGauge;
public PrometheusMetricsService(CollectorRegistry registry) {
instanceStatusGauge = Gauge
.build(EUREKA_INSTANCE_STATUS, "instance status")
.labelNames(LABEL_CLIENT)
.register(registry);
instanceCountGauge = Gauge
.build(EUREKA_INSTANCE_COUNT, "instance count")
.labelNames(LABEL_CLIENT)
.register(registry);
}
/**
* 实例状态埋点
*
* @param client client name || application name
* @param statusValue status
*/
void metricInstanceStatus(String client, Integer statusValue) {
instanceStatusGauge.labels(client).set(statusValue);
}
/**
* 实例数量埋点
*
* @param client client name || application name
* @param count count
*/
void metricInstanceCount(String client, Integer count) {
instanceCountGauge.labels(client).set(count);
}
}
ユーレカ・サーバーのデータ収集プロメテウス
prometheus.yml
- job_name: 'mgmall-eureka'
scrape_interval: 10s
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['10.124.129.42:19110']
Grafanaレポートのメンテナンス
レポートの形式
mall_eureka_instance_count{client="MGMALL-CONFIG"}
.....
![画像-20190531140258528](/ユーザ/ yugj /ライブラリ/ Application Support / typora-ユーザー画像/画像20190531140258528.png)
モニター
AVG()クエリ(Aは、10Sは、今)1を下回っています
![画像-20190531140319350](/ユーザ/ yugj /ライブラリ/ Application Support / typora-ユーザー画像/画像20190531140319350.png)
ます。https://my.oschina.net/yugj/blog/3056695で再現