ユーレカサーバープロメテウスの健康状態の監視サービス

背景

  プロセス監視サービス関連のコンポーネントは、一般的に、早期ビジネス扱われるユーレカから組立ラインオフ別の後に医療サービスを検出するために失敗をもたらす、投与量を超えて使用される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で再現

おすすめ

転載: blog.csdn.net/weixin_33796177/article/details/91629932