全部產品
Search
文件中心

CloudMonitor:通過Java SDK上報監控資料(推薦)

更新時間:Jan 27, 2024

本文為您介紹通過Java SDK上報監控資料的配置方法。

通過Java SDK上報監控資料的方法如下:
  • 您可以直接通過Java SDK上報監控資料。
  • 您可以先在本地通過Java SDK彙總資料,再通過Java SDK上報監控資料。

    彙總周期為60秒或300秒。

安裝Java SDK

通過Maven安裝Java SDK,需要添加的依賴如下:
<dependency>
            <groupId>com.aliyun.openservices</groupId>
            <artifactId>aliyun-cms</artifactId>
            <version>0.2.4</version>
</dependency>

程式碼範例

通過Java SDK方式上報監控資料的程式碼範例如下:
  • 上報未經處理資料
    CMSClientInit.groupId = 101L;//設定公用的應用分組ID。
            CMSClient cmsClient = new CMSClient(endpoint, accKey, secret);//初始化client。
            CustomMetricUploadRequest request = CustomMetricUploadRequest.builder()
                    .append(CustomMetric.builder()
                            .setMetricName("testMetric")//指標名稱。
                            .setGroupId(102L)//設定應用分組ID。
                            .setTime(new Date())
                            .setType(CustomMetric.TYPE_VALUE)//類型為原始值。
                            .appendValue(MetricAttribute.VALUE, 1f)//原始值,key只能是該value,不能自訂。
                            .appendDimension("key", "value")//添加維度。
                            .appendDimension("ip", "127.0.0.1")//添加維度。
                            .build())
                    .build();
            CustomMetricUploadResponse response = cmsClient.putCustomMetric(request);//上報資料。
            System.out.println(JSONObject.toJSONString(response));
  • 上報彙總資料
    CMSClientInit.groupId = 101L;
            CMSClient cmsClient = new CMSClient(endpoint, accKey, secret);
            CustomMetricUploadRequest request = CustomMetricUploadRequest.builder()
                    .append(CustomMetric.builder()
                            .setMetricName("customTest")
                            .setTime(new Date())
                            .setType(CustomMetric.TYPE_AGG)//類型為彙總。
                            .setPeriod(CustomMetric.PERIOD_1M)//周期為1分鐘。
                            .appendDimension("test", "testValue")//設定維度。
                            .appendDimension("dimension", "dimensionValue")//設定維度。
                            .appendValue(MetricAttribute.SUM, 100)//設定求和。
                            .appendValue(MetricAttribute.MAX, 20)//設定最大值。
                            .appendValue(MetricAttribute.MIN, 0.1)//設定最小值。
                            .appendValue(MetricAttribute.COUNT, 20)//設定計數。
                            .appendValue(MetricAttribute.AVG, 5)//設定平均值。
                            .appendValue(MetricAttribute.LAST, 10)//設定周期最後一個值。
                            .appendValue(MetricAttribute.P50, 10)//設定P50。
                            .appendValue(MetricAttribute.P90, 17)//設定P90。
                            .appendValue(MetricAttribute.P99, 19)//設定P99。
                            .build())
                    .build();
            CustomMetricUploadResponse response = cmsClient.putCustomMetric(request);
            System.out.println(JSONObject.toJSONString(response));
說明 CloudMonitor各地區的接入地址,請參見上報監控資料的服務地址

返回樣本

通過Java SDK方式上報監控資料的代碼返回樣本如下:
{
    "Message": "success",
    "RequestId": "E25EE651-9C97-4EFD-AF22-A753B674E8D4",
    "Code": "200"
}

HTTP狀態代碼返回200表示成功。

多周期彙總上報

Java SDK支援在本地先彙總資料,再上報監控資料的功能。
資料類型描述彙總的值記憶體消耗
value一般實值型別除了LastValue外的所有屬性約4KB
gauge採樣值LastValue4Byte
meter求和、速率Sum、SumPerSecond50Byte
counter計數SampleCount10Byte
timer計算時間SampleCount、CountPerSecond、Average、Maximum、Minimum、PXX(P10-P99)約4KB
histogram分布SampleCount、Average、Maximum、Minimum、PXX(P10-P99)約4KB
說明 記憶體消耗是單時間序列和單彙總周期。
程式碼範例如下:
//初始化
        CMSClientInit.groupId = 0L;
        CMSClient cmsClient = new CMSClient(accKey, secret, endpoint);//建立client。
        CMSMetricRegistryBuilder builder = new CMSMetricRegistryBuilder();
        builder.setCmsClient(cmsClient);
//建立registry,包含2個彙總周期。
final MetricRegistry registry = builder.build();
//或建立registry,只建立1分鐘彙總周期。
final MetricRegistry registry = builder.build(RecordLevel._60S);
//使用value。
ValueWrapper value = registry.value(MetricName.build("value"));
value.update(6.5);
//使用meter。
MeterWrapper meter = registry.meter(MetricName.build("meter"));
meter.update(7.2);
//使用counter。
CounterWrapper counter = registry.counter(MetricName.build("counter"));
counter.inc(20);
counter.dec(5);
//使用timer。
TimerWrapper timer = registry.timer(MetricName.build("timer"));
timer.update(30, TimeUnit.MILLISECONDS);
//使用histogram。
HistogramWrapper histogram = registry.histogram(MetricName.build("histogram"));
histogram.update(20);
//使用gauge。
final List list = new ArrayList();
registry.gauge(MetricName.build("gauge"), new Gauge() {
                        @Override
                        public Number getValue() {
                            return list.size();
                        }
                    });