Compare commits

..
1 Commits
Author SHA1 Message Date
tomsun28 491aa5da94 [security] update hertzbeat security model 2025-06-10 22:26:24 +08:00
62 changed files with 815 additions and 2735 deletions
+1 -1
View File
@@ -46,7 +46,7 @@ jobs:
- uses: ./script/ci/github-actions/setup-deps
- name: Build with Maven
run: mvnd clean -B package -Prelease -Dmaven.test.skip=false --file pom.xml
run: mvn clean -B package -Prelease -Dmaven.test.skip=false --file pom.xml
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v4.0.1
@@ -1,121 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hertzbeat.alert.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* volcengine event alert entity class
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class VolcEngineExternEventAlert {
@JsonProperty("Type")
private String type;
@JsonProperty("AccountId")
private String accountId;
@JsonProperty("Source")
private String source;
@JsonProperty("ProjectName")
private String projectName;
@JsonProperty("Id")
private String id;
@JsonProperty("EventType")
private String eventType;
@JsonProperty("DescriptionCN")
private String descriptionCn;
@JsonProperty("HappenedAt")
private Long happenedAt;
@JsonProperty("Region")
private String region;
@JsonProperty("Details")
private EventDetails details;
@JsonProperty("Rules")
private List<EventRule> rules;
/**
* event details
*/
@Data
public static class EventDetails {
@JsonProperty("specversion")
private String specVersion;
@JsonProperty("id")
private String id;
@JsonProperty("source")
private String source;
@JsonProperty("type")
private String type;
@JsonProperty("volcpublishtime")
private String volcPublishTime;
@JsonProperty("volcregion")
private String volcRegion;
@JsonProperty("volcaccountid")
private String volcAccountId;
@JsonProperty("volceventbusname")
private String volcEventBusName;
@JsonProperty("volcresourcename")
private String volcResourceName;
@JsonProperty("subject")
private String subject;
@JsonProperty("time")
private String time;
}
/**
* event rule
*/
@Data
public static class EventRule {
@JsonProperty("RuleId")
private String ruleId;
@JsonProperty("RuleName")
private String ruleName;
@JsonProperty("Level")
private String level;
}
}
@@ -1,203 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hertzbeat.alert.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* Volcengine alarm entity class
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class VolcEngineExternMetricAlert {
@JsonProperty("Type")
private String type;
@JsonProperty("AccountId")
private String accountId;
@JsonProperty("RuleName")
private String ruleName;
@JsonProperty("RuleId")
private String ruleId;
@JsonProperty("Namespace")
private String namespace;
@JsonProperty("SubNamespace")
private String subNamespace;
@JsonProperty("Level")
private String level;
@JsonProperty("HappenedAt")
private String happenedAt;
@JsonProperty("RuleCondition")
private String ruleCondition;
@JsonProperty("Resources")
private List<Resource> resources;
@JsonProperty("RecoveredResources")
private List<Resource> recoveredResources;
@JsonProperty("NoDataResources")
private List<NoDataResource> noDataResources;
@JsonProperty("NoDataRecoveredResources")
private List<NoDataRecoveredResource> noDataRecoveredResources;
/**
* alert resource entity class
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class Resource {
@JsonProperty("Id")
private String id;
@JsonProperty("Name")
private String name;
@JsonProperty("Region")
private String region;
@JsonProperty("FirstAlertTime")
private Long firstAlertTime;
@JsonProperty("LastAlertTime")
private Long lastAlertTime;
@JsonProperty("Metrics")
private List<Metric> metrics;
@JsonProperty("AlertGroupId")
private String alertGroupId;
@JsonProperty("Dimensions")
private List<Dimension> dimensions;
}
/**
* alert no data resource entity class
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public static class NoDataResource extends Resource {
@JsonProperty("NoDataMetrics")
private List<Metric> noDataMetrics;
}
/**
* alert no data recovered resource entity class
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public static class NoDataRecoveredResource extends Resource {
@JsonProperty("DroppedMetrics")
private List<DroppedMetric> droppedMetrics;
}
/**
* alert metric entity class
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Metric {
@JsonProperty("Name")
private String name;
@JsonProperty("Unit")
private String unit;
@JsonProperty("Threshold")
private Double threshold;
@JsonProperty("CurrentValue")
private Object currentValue;
@JsonProperty("Description")
private String description;
@JsonProperty("Warning")
private Boolean warning;
}
/**
* alert dropped metric entity class
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public static class DroppedMetric extends Metric {
@JsonProperty("Reason")
private String reason;
}
/**
* resource dimension entity class
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Dimension {
@JsonProperty("Name")
private String name;
@JsonProperty("NameCN")
private String nameCn;
@JsonProperty("Value")
private String value;
@JsonProperty("Description")
private String description;
}
public static final String ALERT_TYPE_METRIC = "Metric";
public static final String ALERT_TYPE_EVENT = "Event";
public static final String ALERT_TYPE_METRIC_RECOVERED = "MetricRecovered";
public static final String ALERT_TYPE_METRICS_NODATA = "MetricsNoData";
public static final String ALERT_TYPE_NO_DATA_RECOVERED = "NoDataRecovered";
}
@@ -25,8 +25,6 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Alert expression visitor implement
@@ -34,9 +32,7 @@ import java.util.stream.Collectors;
public class AlertExpressionEvalVisitor extends AlertExpressionBaseVisitor<List<Map<String, Object>>> {
private static final String THRESHOLD = "__threshold__";
private static final String NAME = "__name__";
private static final String VALUE = "__value__";
private static final String TIMESTAMP = "__timestamp__";
private final QueryExecutor executor;
private final CommonTokenStream tokens;
@@ -88,26 +84,42 @@ public class AlertExpressionEvalVisitor extends AlertExpressionBaseVisitor<List<
public List<Map<String, Object>> visitAndExpr(AlertExpressionParser.AndExprContext ctx) {
List<Map<String, Object>> leftOperand = visit(ctx.left);
List<Map<String, Object>> rightOperand = visit(ctx.right);
List<Map<String, Object>> results = new ArrayList<>();
// build a hash set of the right-side tag collection
Set<String> rightLabelsSet = rightOperand.stream()
.filter(item -> item.get(VALUE) != null)
.map(this::labelKey)
.collect(Collectors.toSet());
// iterate over the left side, O(1) match
for (Map<String, Object> leftItem : leftOperand) {
Object leftVal = leftItem.get(VALUE);
if (leftVal == null) {
continue;
Map<String, Object> leftMap = null;
boolean leftMatch = false;
Map<String, Object> rightMap = null;
boolean rightMatch = false;
for (Map<String, Object> item : leftOperand) {
if (leftMap == null) {
leftMap = item;
}
String labelKey = labelKey(leftItem);
if (rightLabelsSet.contains(labelKey)) {
results.add(new HashMap<>(leftItem));
if (item.get(VALUE) != null) {
leftMap = item;
leftMatch = true;
break;
}
}
return results;
for (Map<String, Object> item : rightOperand) {
if (rightMap == null) {
rightMap = item;
}
if (item.get(VALUE) != null) {
rightMap = item;
rightMatch = true;
break;
}
}
if (leftMatch && rightMatch) {
rightMap.putAll(leftMap);
return new LinkedList<>(List.of(rightMap));
} else if (leftMap != null) {
leftMap.put(VALUE, null);
return new LinkedList<>(List.of(leftMap));
} else if (rightMap != null) {
rightMap.put(VALUE, null);
return new LinkedList<>(List.of(rightMap));
}
return new LinkedList<>();
}
@Override
@@ -315,20 +327,4 @@ public class AlertExpressionEvalVisitor extends AlertExpressionBaseVisitor<List<
String script = text.substring(1, text.length() - 1);
return executor.execute(script);
}
/**
* Generate tag key (excluding `__name__` and `__value__` and `__timestamp__`)
*/
private String labelKey(Map<String, Object> labelsMap) {
if (null == labelsMap || labelsMap.isEmpty()) {
return "-";
}
String key = labelsMap.entrySet().stream()
.filter(e -> !e.getKey().equals(VALUE) && !e.getKey().equals(NAME) && !e.getKey().equals(TIMESTAMP))
.sorted(Map.Entry.comparingByKey())
.map(e -> e.getKey() + "=" + (e.getValue() == null ? "" : e.getValue()))
.collect(Collectors.joining(","));
return key.isEmpty() ? "-" : key;
}
}
}
@@ -1,244 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hertzbeat.alert.service.impl;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.hertzbeat.alert.dto.VolcEngineExternEventAlert;
import org.apache.hertzbeat.alert.dto.VolcEngineExternMetricAlert;
import org.apache.hertzbeat.alert.reduce.AlarmCommonReduce;
import org.apache.hertzbeat.alert.service.ExternAlertService;
import org.apache.hertzbeat.common.constants.CommonConstants;
import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
import org.apache.hertzbeat.common.util.JsonUtil;
import org.springframework.stereotype.Service;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* Volcengine alarm entity class
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class VolcEngineExternAlertService implements ExternAlertService {
private final AlarmCommonReduce alarmCommonReduce;
private static final Map<String, Integer> severityOrder = Map.of(
CommonConstants.ALERT_SEVERITY_CRITICAL, 1,
CommonConstants.ALERT_SEVERITY_WARNING, 2,
CommonConstants.ALERT_SEVERITY_INFO, 3
);
@Override
@SneakyThrows
public void addExternAlert(String content) {
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(content);
String type = root.get("Type").asText();
if (VolcEngineExternMetricAlert.ALERT_TYPE_EVENT.equals(type)) {
VolcEngineExternEventAlert eventAlert = JsonUtil.fromJson(content, VolcEngineExternEventAlert.class);
if (eventAlert == null) {
log.warn("parse extern event alert content failed! content: {}", content);
return;
}
SingleAlert singleAlert = new VolcEngineAlertConverter().convertEventToSingleAlert(eventAlert);
alarmCommonReduce.reduceAndSendAlarm(singleAlert);
} else {
// deal with metric alert
VolcEngineExternMetricAlert report = JsonUtil.fromJson(content, VolcEngineExternMetricAlert.class);
if (report == null) {
log.warn("parse extern metrics alert content failed! content: {}", content);
return;
}
for (SingleAlert singleAlert : new VolcEngineAlertConverter().convertMetricAlertToSingeAlert(report)) {
alarmCommonReduce.reduceAndSendAlarm(singleAlert);
}
}
}
@Override
public String supportSource() {
return "volcengine";
}
/**
* Converter: VolcEngine alert to SingleAlert
*/
public static class VolcEngineAlertConverter {
/**
* Convert VolcEngine metric alert to SingleAlert List
*/
public List<SingleAlert> convertMetricAlertToSingeAlert(VolcEngineExternMetricAlert alert) {
String status = convertStatus(alert);
if (Objects.equals(alert.getType(), VolcEngineExternMetricAlert.ALERT_TYPE_METRIC)) {
return convertMetricAlert(alert, status, alert.getResources());
}
if (Objects.equals(alert.getType(), VolcEngineExternMetricAlert.ALERT_TYPE_METRICS_NODATA)) {
return convertMetricAlert(alert, status, alert.getNoDataResources());
}
if (Objects.equals(alert.getType(), VolcEngineExternMetricAlert.ALERT_TYPE_NO_DATA_RECOVERED)) {
return convertMetricAlert(alert, status, alert.getNoDataRecoveredResources());
}
if (Objects.equals(alert.getType(), VolcEngineExternMetricAlert.ALERT_TYPE_METRIC_RECOVERED)) {
return convertMetricAlert(alert, status, alert.getRecoveredResources());
}
return List.of();
}
public SingleAlert convertEventToSingleAlert(VolcEngineExternEventAlert alert) {
SingleAlert.SingleAlertBuilder builder = SingleAlert.builder()
.status(CommonConstants.ALERT_STATUS_FIRING)
.startAt(alert.getHappenedAt() * 1000)
.activeAt(alert.getHappenedAt() * 1000)
.labels(buildEventLabels(alert))
.content(alert.getDescriptionCn())
.annotations(new HashMap<>());
return builder.build();
}
/**
* build labels for volcengine event alert
*/
private Map<String, String> buildEventLabels(VolcEngineExternEventAlert event) {
Map<String, String> labels = new HashMap<>();
labels.put("severity", convertEventSeverity(event));
labels.put("__source__", "volcengine");
labels.put("resource_name", event.getDetails().getVolcResourceName());
labels.put("account_id", event.getAccountId());
labels.put("region", event.getRegion());
labels.put("event_type", event.getEventType());
labels.put("source", event.getSource());
return labels;
}
/**
* convert volcengine event alert status to heartbeat alert status
* use the most severe level in the rules
*
* @param alert volcengine event alert
* @return status
*/
private String convertEventSeverity(VolcEngineExternEventAlert alert) {
return alert.getRules().stream().map(VolcEngineExternEventAlert.EventRule::getLevel)
.min((o1, o2) -> severityOrder.get(convertCommonSeverity(o1)).compareTo(severityOrder.get(convertCommonSeverity(o2))))
.orElse(CommonConstants.ALERT_SEVERITY_INFO);
}
private String convertCommonSeverity(String level) {
return switch (level) {
case "critical" -> CommonConstants.ALERT_SEVERITY_CRITICAL;
case "warning" -> CommonConstants.ALERT_SEVERITY_WARNING;
default -> CommonConstants.ALERT_SEVERITY_INFO;
};
}
/**
* create SingleAlert for each resources in volcengine alert
*
* @param alert volcengine alert
* @param status status
* @param resources resources
* @return List of SingleAlert
*/
private List<SingleAlert> convertMetricAlert(VolcEngineExternMetricAlert alert, String status,
List<? extends VolcEngineExternMetricAlert.Resource> resources) {
if (CollectionUtils.isEmpty(resources)) {
return List.of();
}
List<SingleAlert> result = new ArrayList<>();
for (VolcEngineExternMetricAlert.Resource resource : resources) {
SingleAlert.SingleAlertBuilder builder = SingleAlert.builder()
.status(status)
.startAt(resource.getFirstAlertTime() * 1000)
.endAt(resource.getLastAlertTime() * 1000)
.labels(buildLabels(alert, resource))
.activeAt(convertHappenAt(alert.getHappenedAt()))
.content(resource.getName() + alert.getRuleCondition())
.annotations(buildAnnotations(resource));
result.add(builder.build());
}
return result;
}
private Long convertHappenAt(String happenAt) {
String cleanedStr = happenAt.replace("UTC", "").replace("(", "").replace(")", "");
DateTimeFormatter altFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssXXX");
OffsetDateTime odt = OffsetDateTime.parse(cleanedStr, altFormatter);
return odt.toEpochSecond() * 1000;
}
private Map<String, String> buildLabels(VolcEngineExternMetricAlert alert, VolcEngineExternMetricAlert.Resource resource) {
Map<String, String> labels = new HashMap<>();
labels.put("__source__", "volcengine");
labels.put("resource_name", resource.getName());
labels.put("resource_id", resource.getId());
labels.put("rule_id", alert.getRuleId());
return labels;
}
private Map<String, String> buildAnnotations(VolcEngineExternMetricAlert.Resource resource) {
Map<String, String> annotations = new HashMap<>();
if (resource instanceof VolcEngineExternMetricAlert.NoDataResource noDataResource) {
for (VolcEngineExternMetricAlert.Metric noDataMetric : noDataResource.getNoDataMetrics()) {
annotations.put(noDataMetric.getName(), "N/A");
}
}
for (VolcEngineExternMetricAlert.Metric metric : resource.getMetrics()) {
annotations.put(metric.getName(), metric.getCurrentValue() + metric.getUnit());
}
annotations.put("region", resource.getRegion());
List<VolcEngineExternMetricAlert.Dimension> dimensions = resource.getDimensions();
if (CollectionUtils.isNotEmpty(dimensions)) {
for (VolcEngineExternMetricAlert.Dimension dimension : dimensions) {
annotations.put(dimension.getNameCn(), dimension.getValue());
}
}
return annotations;
}
/**
* convert volcengine alert status to heartbeat alert status
*
* @param alert volcengine alert
* @return status
*/
private String convertStatus(VolcEngineExternMetricAlert alert) {
String type = alert.getType();
if (Objects.equals(type, VolcEngineExternMetricAlert.ALERT_TYPE_METRIC)
|| Objects.equals(type, VolcEngineExternMetricAlert.ALERT_TYPE_EVENT)
|| Objects.equals(type, VolcEngineExternMetricAlert.ALERT_TYPE_METRICS_NODATA)) {
return CommonConstants.ALERT_STATUS_FIRING;
}
return CommonConstants.ALERT_STATUS_RESOLVED;
}
}
}
@@ -320,11 +320,11 @@ class AlertExpressionEvalVisitorTest {
List.of(new HashMap<>(Map.of("__value__", 250.0))));
when(mockExecutor.execute("select min(response_time) from api_metrics where endpoint = '/api/users'")).thenReturn(
List.of(new HashMap<>(Map.of("__value__", 50.0))));
List<Map<String, Object>> result = evaluate("(select max(response_time) from api_metrics where endpoint = '/api/users') > 200");
assertEquals(1, result.size());
assertEquals(250.0, result.get(0).get("__value__"));
result = evaluate("(select min(response_time) from api_metrics where endpoint = '/api/users') < 100");
assertEquals(1, result.size());
assertEquals(50.0, result.get(0).get("__value__"));
@@ -473,115 +473,6 @@ class AlertExpressionEvalVisitorTest {
assertEquals(80, result.get(0).get("__value__"));
}
@Test
void testAndOpPromql() {
String promql = "http_server_requests_seconds_count > 10 and http_server_requests_seconds_max > 5";
Map<String, Object> countValue1 = new HashMap<>() {
{
put("exception", "none");
put("instance", "host.docker.internal:8989");
put("__value__", 1307);
put("method", "GET");
put("__name__", "http_server_requests_seconds_count");
put("__timestamp__", "1.750320922467E9");
put("error", "none");
put("job", "spring-boot-app");
put("uri", "/actuator/prometheus");
put("outcome", "SUCCESS");
put("status", "200");
}
};
Map<String, Object> countValue2 = new HashMap<>() {
{
put("exception", "none");
put("instance", "host.docker.internal:8989");
put("__value__", 16);
put("method", "GET");
put("__name__", "http_server_requests_seconds_count");
put("__timestamp__", "1.750320922467E9");
put("error", "none");
put("job", "spring-boot-app");
put("uri", "/**");
put("outcome", "SUCCESS");
put("status", "200");
}
};
Map<String, Object> countValue3 = new HashMap<>() {
{
put("exception", "none");
put("instance", "host.docker.internal:8989");
put("__value__", 7);
put("method", "GET");
put("__name__", "http_server_requests_seconds_count");
put("__timestamp__", "1.750320922467E9");
put("error", "none");
put("job", "spring-boot-app");
put("uri", "/actuator/health");
put("outcome", "SUCCESS");
put("status", "200");
}
};
Map<String, Object> maxValue1 = new HashMap<>() {
{
put("exception", "none");
put("instance", "host.docker.internal:8989");
put("__value__", 10.007799125);
put("method", "GET");
put("__name__", "http_server_requests_seconds_max");
put("__timestamp__", "1.750320922467E9");
put("error", "none");
put("job", "spring-boot-app");
put("uri", "/actuator/prometheus");
put("outcome", "SUCCESS");
put("status", "200");
}
};
Map<String, Object> maxValue2 = new HashMap<>() {
{
put("exception", "none");
put("instance", "host.docker.internal:8989");
put("__value__", 10);
put("method", "GET");
put("__name__", "http_server_requests_seconds_count");
put("__timestamp__", "1.750320922467E9");
put("error", "none");
put("job", "spring-boot-app");
put("uri", "/**");
put("outcome", "SUCCESS");
put("status", "200");
}
};
Map<String, Object> maxValue3 = new HashMap<>() {
{
put("exception", "none");
put("instance", "host.docker.internal:8989");
put("__value__", 0);
put("method", "GET");
put("__name__", "http_server_requests_seconds_count");
put("__timestamp__", "1.750320922467E9");
put("error", "none");
put("job", "spring-boot-app");
put("uri", "/actuator/health");
put("outcome", "SUCCESS");
put("status", "200");
}
};
when(mockExecutor.execute("http_server_requests_seconds_count")).thenReturn(List.of(countValue1, countValue2, countValue3));
when(mockExecutor.execute("http_server_requests_seconds_max")).thenReturn(List.of(maxValue1, maxValue2, maxValue3));
List<Map<String, Object>> result = evaluate(promql);
assertEquals(2, result.size());
assertEquals(1307, result.get(0).get("__value__"));
assertEquals(16, result.get(1).get("__value__"));
}
private List<Map<String, Object>> evaluate(String expression) {
AlertExpressionLexer lexer = new AlertExpressionLexer(CharStreams.fromString(expression));
CommonTokenStream tokens = new CommonTokenStream(lexer);
@@ -23,6 +23,7 @@ import org.apache.hertzbeat.alert.reduce.AlarmCommonReduce;
import org.apache.hertzbeat.alert.service.impl.AlibabaCloudSlsExternAlertService;
import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
import org.apache.hertzbeat.common.util.JsonUtil;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
@@ -42,6 +43,7 @@ import static org.mockito.Mockito.verify;
/**
* unit test for {@link AlibabaCloudSlsExternAlertServiceTest }
*/
@Disabled
@ExtendWith(MockitoExtension.class)
public class AlibabaCloudSlsExternAlertServiceTest {
@@ -17,6 +17,11 @@
package org.apache.hertzbeat.alert.service;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import java.util.HashMap;
import com.github.benmanes.caffeine.cache.Cache;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
@@ -24,24 +29,17 @@ import org.apache.hertzbeat.alert.service.impl.DataSourceServiceImpl;
import org.apache.hertzbeat.warehouse.db.QueryExecutor;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import org.mockito.Mockito;
/**
* test case for {@link DataSourceService}
*/
class DataSourceServiceTest {
private DataSourceServiceImpl dataSourceService;
@BeforeEach
void setUp() {
dataSourceService = new DataSourceServiceImpl();
@@ -53,12 +51,12 @@ class DataSourceServiceTest {
new HashMap<>(Map.of("__value__", 100.0, "timestamp", 1343554, "instance", "node1")),
new HashMap<>(Map.of("__value__", 200.0, "timestamp", 1343555, "instance", "node2"))
);
QueryExecutor mockExecutor = Mockito.mock(QueryExecutor.class);
Mockito.when(mockExecutor.support("promql")).thenReturn(true);
Mockito.when(mockExecutor.execute(Mockito.anyString())).thenReturn(prometheusData);
dataSourceService.setExecutors(List.of(mockExecutor));
List<Map<String, Object>> result = dataSourceService.calculate("promql", "node_cpu_seconds_total > 150");
assertEquals(2, result.size());
assertNull(result.get(0).get("__value__"));
@@ -298,36 +296,45 @@ class DataSourceServiceTest {
@Test
void calculate15() {
List<Map<String, Object>> prometheusData1 = List.of(
new HashMap<>(Map.of("__value__", 1))
new HashMap<>(Map.of("__value__", 100.0, "timestamp", 1343554, "instance", "node1")),
new HashMap<>(Map.of("__value__", 200.0, "timestamp", 1343555, "instance", "node2"))
);
List<Map<String, Object>> prometheusData2 = List.of(
new HashMap<>(Map.of("__value__", 100.0, "timestamp", 1343554, "instance", "node1")),
new HashMap<>(Map.of("__value__", 200.0, "timestamp", 1343555, "instance", "node2"))
);
QueryExecutor mockExecutor = Mockito.mock(QueryExecutor.class);
Mockito.when(mockExecutor.support("promql")).thenReturn(true);
Mockito.when(mockExecutor.execute("count(node_cpu_seconds_total{mode=\"user\"} > 250)")).thenReturn(prometheusData1);
Mockito.when(mockExecutor.execute("count(node_cpu_seconds_total{mode=\"idle\"} < 220 )")).thenReturn(new ArrayList<>());
Mockito.when(mockExecutor.execute("node_cpu_seconds_total{mode=\"user\"}")).thenReturn(prometheusData1);
Mockito.when(mockExecutor.execute("node_cpu_seconds_total{mode=\"idle\"}")).thenReturn(prometheusData2);
dataSourceService.setExecutors(List.of(mockExecutor));
List<Map<String, Object>> result = dataSourceService.calculate("promql", "count(node_cpu_seconds_total{mode=\"user\"} > 250) > 0 and count(node_cpu_seconds_total{mode=\"idle\"} < 220 ) > 0");
assertEquals(0, result.size());
List<Map<String, Object>> result = dataSourceService.calculate("promql", "node_cpu_seconds_total{mode=\"user\"} > 250 and node_cpu_seconds_total{mode=\"idle\"} < 220");
assertEquals(1, result.size());
assertNull(result.get(0).get("__value__"));
}
@Test
void calculate16() {
List<Map<String, Object>> prometheusData1 = List.of(
new HashMap<>(Map.of("__value__", 1))
new HashMap<>(Map.of("__value__", 100.0, "timestamp", 1343554, "instance", "node1")),
new HashMap<>(Map.of("__value__", 200.0, "timestamp", 1343555, "instance", "node2"))
);
List<Map<String, Object>> prometheusData2 = List.of(
new HashMap<>(Map.of("__value__", 1))
new HashMap<>(Map.of("__value__", 100.0, "timestamp", 1343554, "instance", "node1")),
new HashMap<>(Map.of("__value__", 200.0, "timestamp", 1343555, "instance", "node2"))
);
QueryExecutor mockExecutor = Mockito.mock(QueryExecutor.class);
Mockito.when(mockExecutor.support("promql")).thenReturn(true);
Mockito.when(mockExecutor.execute("count(node_cpu_seconds_total{mode=\"user\"} > 250)")).thenReturn(prometheusData1);
Mockito.when(mockExecutor.execute("count(node_cpu_seconds_total{mode=\"idle\"} < 220 )")).thenReturn(prometheusData2);
Mockito.when(mockExecutor.execute("node_cpu_seconds_total{mode=\"user\"}")).thenReturn(prometheusData1);
Mockito.when(mockExecutor.execute("node_cpu_seconds_total{mode=\"idle\"}")).thenReturn(prometheusData2);
dataSourceService.setExecutors(List.of(mockExecutor));
List<Map<String, Object>> result = dataSourceService.calculate("promql", "count(node_cpu_seconds_total{mode=\"user\"} > 250) > 0 and count(node_cpu_seconds_total{mode=\"idle\"} < 220 ) > 0");
List<Map<String, Object>> result = dataSourceService.calculate("promql", "node_cpu_seconds_total{mode=\"user\"} > 50 and node_cpu_seconds_total{mode=\"idle\"} < 20");
assertEquals(1, result.size());
assertNotNull(result.get(0).get("__value__"));
assertNull(result.get(0).get("__value__"));
}
@Test
@@ -23,6 +23,7 @@ import org.apache.hertzbeat.alert.service.impl.HuaweiCloudExternAlertService;
import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
import org.apache.hertzbeat.common.util.JsonUtil;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
@@ -38,6 +39,7 @@ import static org.mockito.Mockito.verify;
/**
* unit test for {@link AlibabaCloudSlsExternAlertServiceTest }
*/
@Disabled
@ExtendWith(MockitoExtension.class)
public class HuaweiCloudExternAlertServiceTest {
@@ -1,92 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hertzbeat.alert.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.hertzbeat.alert.config.SmsConfig;
import org.apache.hertzbeat.alert.config.SmslocalSmsProperties;
import org.apache.hertzbeat.base.dao.GeneralConfigDao;
import org.apache.hertzbeat.common.constants.GeneralConfigTypeEnum;
import org.apache.hertzbeat.common.entity.manager.GeneralConfig;
import org.apache.hertzbeat.common.util.JsonUtil;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.mockito.Mockito.when;
/**
* unit test for {@link SmsClientFactory }
*/
@ExtendWith(MockitoExtension.class)
public class SmsClientFactoryTest {
@Mock
private GeneralConfigDao generalConfigDao;
@Mock
private ObjectMapper objectMapper;
@Mock
private SmsConfig yamlSmsConfig;
@InjectMocks
private SmsClientFactory smsClientFactory;
@Test
void testloadDbConfig() throws JsonProcessingException {
GeneralConfig generalConfig = new GeneralConfig();
SmsConfig smsConfig = new SmsConfig();
smsConfig.setType("smslocal");
smsConfig.setEnable(true);
smsConfig.setSmslocal(new SmslocalSmsProperties("11"));
generalConfig.setContent(JsonUtil.toJson(smsConfig));
when(objectMapper.readValue(generalConfig.getContent(), SmsConfig.class)).thenReturn(smsConfig);
when(generalConfigDao.findByType(GeneralConfigTypeEnum.sms.name())).thenReturn(generalConfig);
assertNotNull(smsClientFactory.getSmsClient());
}
@Test
void testloadYamlConfig() {
when(generalConfigDao.findByType(GeneralConfigTypeEnum.sms.name())).thenReturn(null);
when(yamlSmsConfig.getType()).thenReturn("smslocal");
when(yamlSmsConfig.isEnable()).thenReturn(true);
when(yamlSmsConfig.getSmslocal()).thenReturn(new SmslocalSmsProperties("11"));
assertNotNull(smsClientFactory.getSmsClient());
}
@Test
void testNull() {
when(generalConfigDao.findByType(GeneralConfigTypeEnum.sms.name())).thenReturn(null);
when(yamlSmsConfig.getType()).thenReturn("");
assertNull(smsClientFactory.getSmsClient());
}
}
@@ -1,73 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hertzbeat.alert.service.impl;
import com.google.common.collect.Lists;
import org.apache.hertzbeat.alert.config.SmslocalSmsProperties;
import org.apache.hertzbeat.common.entity.alerter.GroupAlert;
import org.apache.hertzbeat.common.entity.alerter.NoticeReceiver;
import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
import org.apache.hertzbeat.common.support.exception.SendMessageException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.when;
/**
* Test case for {@link SmsLocalSmsClientImpl}
*/
@ExtendWith(MockitoExtension.class)
public class SmsLocalSmsClientImplTest {
@Mock
private SmslocalSmsProperties smslocalSmsProperties;
private SmsLocalSmsClientImpl smsLocalSmsClient;
@BeforeEach
void setUp() {
smsLocalSmsClient = new SmsLocalSmsClientImpl(smslocalSmsProperties);
when(smslocalSmsProperties.getApiKey()).thenReturn("2");
}
@Test
void testSendMessage() {
assertEquals("smslocal", smsLocalSmsClient.getType());
assertTrue(smsLocalSmsClient.checkConfig());
//
NoticeReceiver noticeReceiver = new NoticeReceiver();
noticeReceiver.setPhone("13888888888");
SingleAlert singleAlert = new SingleAlert();
singleAlert.setContent("test");
GroupAlert groupAlert = new GroupAlert();
groupAlert.setAlerts(Lists.newArrayList(singleAlert));
assertThrows(SendMessageException.class,
() -> smsLocalSmsClient.sendMessage(noticeReceiver, null, groupAlert));
}
}
@@ -1,85 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hertzbeat.alert.service.impl;
import org.apache.hertzbeat.alert.config.UniSmsProperties;
import org.apache.hertzbeat.common.entity.alerter.GroupAlert;
import org.apache.hertzbeat.common.entity.alerter.NoticeReceiver;
import org.apache.hertzbeat.common.support.exception.SendMessageException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.HashMap;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.when;
/**
* Test case for {@link UniSmsClientImpl}
*/
@ExtendWith(MockitoExtension.class)
public class UniSmsClientImplTest {
@Mock
private UniSmsProperties uniSmsProperties;
private UniSmsClientImpl uniSmsClient;
@BeforeEach
void setUp() {
uniSmsClient = new UniSmsClientImpl(uniSmsProperties);
when(uniSmsProperties.getSignature()).thenReturn("2");
when(uniSmsProperties.getTemplateId()).thenReturn("any(String.class)");
when(uniSmsProperties.getAuthMode()).thenReturn("hmac");
when(uniSmsProperties.getAccessKeyId()).thenReturn("hmac");
when(uniSmsProperties.getAccessKeySecret()).thenReturn("hmac");
}
@Test
void testSendMessage() {
assertEquals("unisms", uniSmsClient.getType());
assertTrue(uniSmsClient.checkConfig());
//
NoticeReceiver noticeReceiver = new NoticeReceiver();
noticeReceiver.setPhone("13888888888");
Map<String, String> commonLabels = new HashMap<>();
commonLabels.put("instance", "");
commonLabels.put("priority", "unknown");
Map<String, String> commonAnnotations = new HashMap<>();
commonAnnotations.put("test", "test");
GroupAlert groupAlert = new GroupAlert();
groupAlert.setCommonLabels(commonLabels);
groupAlert.setCommonAnnotations(commonAnnotations);
assertThrows(SendMessageException.class,
() -> uniSmsClient.sendMessage(noticeReceiver, null, groupAlert));
}
}
@@ -1,48 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hertzbeat.alert.util;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* Test case for {@link CryptoUtils}
*/
public class CryptoUtilsTest {
@Test
void testSha256Hex() {
String sign = CryptoUtils.sha256Hex("Hello world.");
assertEquals("aa3ec16e6acc809d8b2818662276256abfd2f1b441cb51574933f3d4bd115d11", sign);
}
@Test
void testHmacSha256Base64Debug() {
String signature = CryptoUtils.hmacSha256Base64("your-real-key", "your-real-data");
assertEquals("8JrfX0v5Tt3s8PfI85o6jcf5XM3C+vLlMwvFp45LupU=", signature);
}
@Test
void testHmacSha256Hex() {
String signature = CryptoUtils.hmacSha256Hex("your-real-key", "your-real-data");;
assertEquals("41878ccd7ecd795a2dd7ec39be7f33fed4be3ec75f5307689e39dd6f41fdbaac", signature);
}
}
@@ -19,7 +19,6 @@ package org.apache.hertzbeat.alert.util;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Optional;
import org.junit.jupiter.api.Test;
@@ -59,13 +58,4 @@ class DateUtilTest {
actualTimestamp = DateUtil.getTimeStampFromFormat(date, format);
assertFalse(actualTimestamp.isPresent());
}
@Test
void getZonedTimeStampFromFormat() {
String dataStr = "2025/06/02 22:56:15 GMT+08:00";
Long time = DateUtil.getZonedTimeStampFromFormat(dataStr, "yyyy/MM/dd HH:mm:ss 'GMT'XXX");
assertNotNull(time);
assertEquals(1748876175000L, time);
}
}
@@ -166,7 +166,7 @@ public class HttpCollectImpl extends AbstractCollect {
case DispatchConstants.PARSE_XML_PATH ->
parseResponseByXmlPath(resp, metrics, builder, responseTime);
case DispatchConstants.PARSE_WEBSITE ->
parseResponseByWebsite(resp, metrics, metrics.getHttp(), builder, responseTime, statusCode);
parseResponseByWebsite(resp, metrics, metrics.getHttp(), builder, responseTime);
case DispatchConstants.PARSE_SITE_MAP ->
parseResponseBySiteMap(resp, metrics.getAliasFields(), builder);
case DispatchConstants.PARSE_HEADER ->
@@ -237,15 +237,11 @@ public class HttpCollectImpl extends AbstractCollect {
}
private void parseResponseByWebsite(String resp, Metrics metrics, HttpProtocol http,
CollectRep.MetricsData.Builder builder, Long responseTime, int statusCode) {
CollectRep.MetricsData.Builder builder, Long responseTime) {
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
int keywordNum = CollectUtil.countMatchKeyword(resp, http.getKeyword());
for (String alias : metrics.getAliasFields()) {
if (CollectorConstants.STATUS_CODE.equalsIgnoreCase(alias)) {
valueRowBuilder.addColumn(Integer.toString(statusCode));
} else {
addColumnForSummary(responseTime, valueRowBuilder, keywordNum, alias);
}
addColumnForSummary(responseTime, valueRowBuilder, keywordNum, alias);
}
builder.addValueRow(valueRowBuilder.build());
}
@@ -17,7 +17,6 @@
package org.apache.hertzbeat.collector.collect.http;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -26,7 +25,6 @@ import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import com.google.common.collect.Lists;
import org.apache.hertzbeat.collector.dispatch.DispatchConstants;
import org.apache.hertzbeat.common.entity.job.Metrics;
import org.apache.hertzbeat.common.entity.job.protocol.HttpProtocol;
@@ -75,30 +73,6 @@ class HttpCollectImplTest {
assert "http".equals(protocol);
}
@Test
void parseResponseByWebsite() {
HttpProtocol http = HttpProtocol.builder().build();
http.setMethod("GET");
http.setHost("http://127.0.0.1");
http.setUrl("/");
http.setPort("8428");
http.setParseType("website");
http.setEnableUrlEncoding("true");
Metrics metrics = Metrics.builder()
.http(http)
.aliasFields(Lists.newArrayList("responseTime", "keyword", "statusCode"))
.build();
CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder();
httpCollectImpl.collect(builder, metrics);
assertNotNull(builder.getValuesList());
for (CollectRep.ValueRow row : builder.getValuesList()) {
assertNotNull(row.getColumns(0));
assertEquals(row.getColumns(1), "0");
assertEquals(row.getColumns(2), "200");
}
}
@Test
void parseResponseByXmlPath() throws Exception {
// Create a sample XML response
@@ -47,6 +47,6 @@ public interface CollectorConstants extends NetworkConstants {
String RESPONSE_TIME = "responseTime";
String STATUS_CODE = "statusCode";
String STATUS_CODE = "StatusCode";
}
@@ -81,12 +81,12 @@ public class GroupAlert {
@Schema(title = "Common Annotations", example = "{\"summary\": \"High CPU usage detected\", \"description\": \"CPU usage is back to normal for server1\"}")
@Convert(converter = JsonMapAttributeConverter.class)
@Column(columnDefinition = "TEXT")
@Column(length = 4096)
private Map<String, String> commonAnnotations;
@Schema(title = "Alert Fingerprints", example = "[\"dxsdfdsf\"]")
@Convert(converter = JsonStringListAttributeConverter.class)
@Column(columnDefinition = "TEXT")
@Column(length = 8192)
private List<String> alertFingerprints;
@Schema(title = "The creator of this record", example = "tom")
@@ -120,9 +120,6 @@ public class BulletinServiceImpl implements BulletinService {
List<BulletinMetricsData.Data> dataList = new ArrayList<>();
for (Long monitorId : bulletin.getMonitorIds()) {
Monitor monitor = monitorService.getMonitor(monitorId);
if (null == monitor) {
continue;
}
BulletinMetricsData.Data.DataBuilder dataBuilder = BulletinMetricsData.Data.builder()
.monitorId(monitorId)
.monitorName(monitor.getName())
@@ -62,6 +62,14 @@ sureness:
8tVt4bisXQ13rbN0oxhUZR73M6EByXIO+SV5
dKhaX0csgOCTlCxq20yhmUea6H6JIpSE2Rwp'
otel:
traces:
exporter: none
metrics:
exporter: none
logs:
exporter: none
---
spring:
config:
@@ -1,24 +0,0 @@
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements. See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership. The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied. See the License for the
-- specific language governing permissions and limitations
-- under the License.
-- ensure every sql can rerun without error
-- Modify common_annotations column to TEXT (H2 TEXT is equivalent to CLOB)
ALTER TABLE HZB_ALERT_GROUP ALTER COLUMN common_annotations CLOB;
-- Modify alert_fingerprints column to TEXT (H2 TEXT is equivalent to CLOB)
ALTER TABLE HZB_ALERT_GROUP ALTER COLUMN alert_fingerprints CLOB;
@@ -1,64 +0,0 @@
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements. See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership. The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied. See the License for the
-- specific language governing permissions and limitations
-- under the License.
-- ensure every sql can rerun without error
-- Modify hzb_alert_group table columns to TEXT type to resolve MySQL row size limit issue
DELIMITER //
CREATE PROCEDURE ModifyGroupAlertColumns()
BEGIN
DECLARE table_exists INT;
DECLARE col_exists INT;
-- Check if the table exists
SELECT COUNT(*) INTO table_exists
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'HZB_ALERT_GROUP';
IF table_exists = 1 THEN
-- Check and modify common_annotations column to TEXT
SELECT COUNT(*) INTO col_exists
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'HZB_ALERT_GROUP'
AND COLUMN_NAME = 'common_annotations'
AND DATA_TYPE != 'text';
IF col_exists = 1 THEN
ALTER TABLE HZB_ALERT_GROUP MODIFY COLUMN common_annotations TEXT;
END IF;
-- Check and modify alert_fingerprints column to TEXT
SELECT COUNT(*) INTO col_exists
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'HZB_ALERT_GROUP'
AND COLUMN_NAME = 'alert_fingerprints'
AND DATA_TYPE != 'text';
IF col_exists = 1 THEN
ALTER TABLE HZB_ALERT_GROUP MODIFY COLUMN alert_fingerprints TEXT;
END IF;
END IF;
END //
DELIMITER ;
CALL ModifyGroupAlertColumns();
DROP PROCEDURE IF EXISTS ModifyGroupAlertColumns;
COMMIT;
@@ -1,25 +0,0 @@
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements. See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership. The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied. See the License for the
-- specific language governing permissions and limitations
-- under the License.
-- ensure every sql can rerun without error
-- Modify hzb_alert_group table columns to TEXT type to resolve row size limit issue
ALTER TABLE HZB_ALERT_GROUP ALTER COLUMN common_annotations TYPE TEXT;
ALTER TABLE HZB_ALERT_GROUP ALTER COLUMN alert_fingerprints TYPE TEXT;
commit;
@@ -453,7 +453,7 @@ metrics:
i18n:
zh-CN: 已分配内存
en-US: Committed
ja-JP: コミットメモリ
ja-JP: コミットメモリ
- field: init
type: 0
unit: MB
@@ -304,12 +304,6 @@ metrics:
zh-CN: 关键词数量
en-US: Keyword
ja-JP: キーワード
- field: statusCode
type: 0
i18n:
zh-CN: 状态码
en-US: Status Code
ja-JP: 状態コード
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# the config content when protocol is http
@@ -73,7 +73,7 @@ params:
name:
zh-CN: 启用HTTPS
en-US: SSL
ja-JP: SSL利用
ja-JP: HTTPS利用
type: boolean
required: false
defaultValue: false
@@ -232,7 +232,7 @@ metrics:
i18n:
zh-CN: 状态
en-US: state
ja-JP: 状態
ja-JP: ステート
type: 1
- field: status
i18n:
@@ -21,13 +21,11 @@ app: flink_on_yarn
name:
zh-CN: Apache Flink On Yarn
en-US: Apache Flink On Yarn
ja-JP: Apache Flink On Yarn
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 对 Flink 流引擎 Yarn 模式的通用指标进行测量监控。<br>您可以点击 “<i>新建 Flink On Yarn</i>” 并进行配置,或者选择“<i>更多操作</i>”,导入已有配置。
en-US: Hertzbeat monitoring Flink Stream through general performance metric. You could click the "<i>New Flink Stream</i>" button and proceed with the configuration or import an existing setup through the "<i>More Actions</i>" menu.
zh-TW: Hertzbeat 對 Flink 流引擎 Yarn 模式的通用指標進行測量監控。<br>您可以點擊 “<i>新建 Flink On Yarn</i>” 並進行配置,或者選擇“<i>更多操作</i>”,導入已有配置。
ja-JP: HertzBeat は Flink 「Yarn モード」の一般的なメトリック監視します。<br>「<i>新規 Flink</i>」をクリックしてパラメタを設定した後、新規することができます。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/flink_on_yarn
en-US: https://hertzbeat.apache.org/docs/help/flink_on_yarn
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: Yarn端口
en-US: Yarn Port
ja-JP: Yarnポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +61,6 @@ params:
name:
zh-CN: 应用ID
en-US: Application ID
ja-JP: 応用ID
# type-param field type(most mapping the html input type)
type: text
# required-true or false
@@ -76,7 +71,6 @@ params:
name:
zh-CN: 启动SSL
en-US: SSL
ja-JP: SSL利用
# type-param field type(boolean mapping the html switch tag)
type: boolean
# required-true or false
@@ -86,7 +80,6 @@ params:
name:
zh-CN: 认证方式
en-US: Auth Type
ja-JP: 認証方法
# type-param field type(most mapping the html input type)
type: radio
required: false
@@ -101,7 +94,6 @@ params:
name:
zh-CN: 用户名
en-US: Username
ja-JP: ユーザー名
type: text
limit: 50
required: false
@@ -110,7 +102,6 @@ params:
name:
zh-CN: 密码
en-US: Password
ja-JP: パスワード
type: password
required: false
hide: true
@@ -120,7 +111,6 @@ metrics:
i18n:
zh-CN: JobManager Metrics
en-US: JobManager Metrics
ja-JP: JobManagerメトリック
priority: 0
fields:
- field: id
@@ -129,13 +119,11 @@ metrics:
i18n:
zh-CN: 监控项
en-US: key
ja-JP: キー
- field: value
type: 0
i18n:
zh-CN:
en-US: value
ja-JP:
protocol: http
http:
host: ^_^host^_^
@@ -155,7 +143,6 @@ metrics:
i18n:
zh-CN: JobManager Config
en-US: JobManager Config
ja-JP: JobManager設定
priority: 1
fields:
- field: key
@@ -163,13 +150,11 @@ metrics:
i18n:
zh-CN: 监控项
en-US: key
ja-JP: キー
- field: value
type: 1
i18n:
zh-CN:
en-US: value
ja-JP:
protocol: http
http:
host: ^_^host^_^
@@ -190,7 +175,6 @@ metrics:
i18n:
zh-CN: TaskManager
en-US: TaskManager
ja-JP: TaskManager
priority: 2
fields:
- field: id
@@ -199,198 +183,168 @@ metrics:
i18n:
zh-CN: Container ID
en-US: Container ID
ja-JP: コンテナID
- field: path
type: 1
i18n:
zh-CN: Path
en-US: Path
ja-JP: パス
- field: dataPort
type: 1
i18n:
zh-CN: Data Port
en-US: Data Port
ja-JP: データポート
- field: jmxPort
type: 1
i18n:
zh-CN: JMX Port
en-US: JMX Port
ja-JP: JMXポート
- field: timeSinceLastHeartbeat
type: 0
i18n:
zh-CN: Last Heartbeat
en-US: Last Heartbeat
ja-JP: 最後のハートビート
- field: slotsNumber
type: 0
i18n:
zh-CN: All Slots
en-US: All Slots
ja-JP: スロット
- field: freeSlots
type: 0
i18n:
zh-CN: Free Slots
en-US: Free Slots
ja-JP: 利用可能なスロット
- field: totalResourceCpuCores
type: 0
i18n:
zh-CN: totalResourceCpuCores
en-US: totalResourceCpuCores
ja-JP: totalResourceCpuCores
- field: totalResourceTaskHeapMemory
type: 0
i18n:
zh-CN: totalResourceTaskHeapMemory
en-US: totalResourceTaskHeapMemory
ja-JP: totalResourceTaskHeapMemory
unit: MB
- field: totalResourceManagedMemory
type: 0
i18n:
zh-CN: totalResourceManagedMemory
en-US: totalResourceManagedMemory
ja-JP: totalResourceManagedMemory
unit: MB
- field: totalResourceNetworkMemory
type: 0
i18n:
zh-CN: totalResourceNetworkMemory
en-US: totalResourceNetworkMemory
ja-JP: totalResourceNetworkMemory
unit: MB
- field: freeResourceCpuCores
type: 0
i18n:
zh-CN: freeResourceCpuCores
en-US: freeResourceCpuCores
ja-JP: freeResourceCpuCores
- field: freeResourceTaskHeapMemory
type: 0
i18n:
zh-CN: freeResourceTaskHeapMemory
en-US: freeResourceTaskHeapMemory
ja-JP: freeResourceTaskHeapMemory
unit: MB
- field: freeResourceTaskOffHeapMemory
type: 0
i18n:
zh-CN: freeResourceTaskOffHeapMemory
en-US: freeResourceTaskOffHeapMemory
ja-JP: freeResourceTaskOffHeapMemory
unit: MB
- field: freeResourceManagedMemory
type: 0
i18n:
zh-CN: freeResourceManagedMemory
en-US: freeResourceManagedMemory
ja-JP: freeResourceManagedMemory
unit: MB
- field: freeResourceNetworkMemory
type: 0
i18n:
zh-CN: freeResourceNetworkMemory
en-US: freeResourceNetworkMemory
ja-JP: freeResourceNetworkMemory
unit: MB
- field: hardwareCpuCores
type: 0
i18n:
zh-CN: CPU Cores
en-US: CPU Cores
ja-JP: Cpuコア数
- field: hardwarePhysicalMemory
type: 0
i18n:
zh-CN: Physical MEM
en-US: Physical MEM
ja-JP: 物理メモリ
unit: GB
- field: hardwareFreeMemory
type: 0
i18n:
zh-CN: JVM Heap Size
en-US: JVM Heap Size
ja-JP: Java仮想マシンのヒープサイズ
unit: MB
- field: hardwareManagedMemory
type: 0
i18n:
zh-CN: Flink Managed MEM
en-US: Flink Managed MEM
ja-JP: Flink管理メモリ
unit: MB
- field: memoryConfigurationFrameworkHeap
type: 0
i18n:
zh-CN: Framework Heap
en-US: Framework Heap
ja-JP: フレームワークのヒープ
unit: MB
- field: memoryConfigurationTaskHeap
type: 0
i18n:
zh-CN: Task Heap
en-US: Task Heap
ja-JP: タスクヒープ
unit: MB
- field: memoryConfigurationFrameworkOffHeap
type: 0
i18n:
zh-CN: Framework Off-Heap
en-US: Framework Off-Heap
ja-JP: フレームワークのオフヒープ
unit: MB
- field: memoryConfigurationTaskOffHeap
type: 0
i18n:
zh-CN: Task Off-Heap
en-US: Task Off-Heap
ja-JP: タスクオフヒープ
unit: MB
- field: memoryConfigurationNetworkMemory
type: 0
i18n:
zh-CN: Network
en-US: Network
ja-JP: ネットワーク
unit: MB
- field: memoryConfigurationManagedMemory
type: 0
i18n:
zh-CN: Managed Memory
en-US: Managed Memory
ja-JP: 管理メモリ
unit: MB
- field: memoryConfigurationJvmMetaspace
type: 0
i18n:
zh-CN: JVM Metaspace
en-US: JVM Metaspace
ja-JP: Java仮想マシンのメタスペース
unit: MB
- field: memoryConfigurationJvmOverhead
type: 0
i18n:
zh-CN: JVM Overhead
en-US: JVM Overhead
ja-JP: Java仮想マシンのオーバーヘッド
- field: memoryConfigurationTotalFlinkMemory
type: 0
i18n:
zh-CN: memoryConfigurationTotalFlinkMemory
en-US: memoryConfigurationTotalFlinkMemory
ja-JP: memoryConfigurationTotalFlinkMemory
- field: memoryConfigurationTotalProcessMemory
type: 0
i18n:
zh-CN: memoryConfigurationTotalProcessMemory
en-US: memoryConfigurationTotalProcessMemory
ja-JP: memoryConfigurationTotalProcessMemory
aliasFields:
- $.id
- $.path
@@ -485,14 +439,12 @@ metrics:
i18n:
zh-CN: TaskManager Metrics
en-US: TaskManager Metrics
ja-JP: TaskManagerメトリック
priority: 3
fields:
- field: container_id
i18n:
zh-CN: Container ID
en-US: Container ID
ja-JP: コンテナID
type: 1
label: true
- field: id
@@ -500,14 +452,12 @@ metrics:
i18n:
zh-CN: 监控项
en-US: key
ja-JP: キー
label: true
- field: value
type: 0
i18n:
zh-CN:
en-US: value
ja-JP:
unit: MB
units:
- value=B->MB
@@ -21,13 +21,11 @@ app: freebsd
name:
zh-CN: FreeBSD操作系统
en-US: OS FreeBSD
ja-JP: OS FreeBSD
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-ssh'> SSH 协议</a> 对 FreeBSD 操作系统的通用性能指标 (系统信息、CPU、内存、磁盘、网卡、文件系统、TOP资源进程等) 进行采集监控。<br>您可以点击“<i>新建 FreeBSD</i>”并配置HOST端口账户等相关参数进行添加,支持SSH账户密码或密钥认证。或者选择“<i>更多操作</i>”,导入已有配置。
en-US: HertzBeat uses <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-ssh'> SSH protocol</a> to monitors FreeBSD operating system's general performance metrics such as cpu, memory, disk, basic, interface, disk_free, top_process etc. <br>You can click the "<i>New FreeBSD</i>" and config host port and other related params to add, auth support password or secretKey. Or import an existing setup through the "<i>More Actions</i>" menu.
zh-TW: Hertzbeat 使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-ssh'> SSH 协议</a> 對 FreeBSD 操作系统的通用性能指標 (系統信息、CPU、內存、磁盤、網卡、文件系統、TOP資源進程等) 進行採集監控。<br>您可以點擊“<i>新建 FreeBSD</i>”並配置HOST端口賬戶等相關參數進行添加,支持SSH賬戶密碼或密鑰認證。或者選擇“<i>更多操作</i>”,導入已有配寘。
ja-JP: Hertzbeat は <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-ssh'> SSHプロトコルを介して</a> Centosシステムの一般的なパフォーマンスのメトリック監視します。<br>「<i>新規 FreeBSD</i>」をクリックしてホストなどのパラメタを設定した後、新規することができます。SSHまたはキー認証をサポートします。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn//docs/help/freebsd
en-US: https://hertzbeat.apache.org/docs/help/freebsd
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +61,6 @@ params:
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
ja-JP: タイムアウト(ms)
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -80,7 +75,6 @@ params:
name:
zh-CN: 复用连接
en-US: Reuse Connection
ja-JP: コネクション再利用
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -92,7 +86,6 @@ params:
name:
zh-CN: 使用代理
en-US: Use Proxy Connection
ja-JP: プロキシコネクション利用
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -104,7 +97,6 @@ params:
name:
zh-CN: 用户名
en-US: Username
ja-JP: ユーザー名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -117,7 +109,6 @@ params:
name:
zh-CN: 密码
en-US: Password
ja-JP: パスワード
# type-param field type(most mapping the html input tag)
type: password
# required-true or false
@@ -128,7 +119,6 @@ params:
name:
zh-CN: 私钥
en-US: PrivateKey
ja-JP: 秘密鍵
# type-param field type(most mapping the html input type)
type: textarea
placeholder: -----BEGIN RSA PRIVATE KEY-----
@@ -142,7 +132,6 @@ params:
name:
zh-CN: 密钥短语
en-US: PrivateKey PassPhrase
ja-JP: 秘密鍵フレーズ
# type-param field type(most mapping the html input type)
type: password
# required-true or false
@@ -155,7 +144,6 @@ params:
name:
zh-CN: 代理主机
en-US: Proxy Host
ja-JP: プロキシホスト
# type-param field type(most mapping the html input type)
type: text
# required-true or false
@@ -167,7 +155,6 @@ params:
name:
zh-CN: 代理端口
en-US: Proxy Port
ja-JP: プロキシポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -184,7 +171,6 @@ params:
name:
zh-CN: 代理用户名
en-US: Proxy Username
ja-JP: プロキシユーザー名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -199,7 +185,6 @@ params:
name:
zh-CN: 代理密码
en-US: Proxy Password
ja-JP: プロキシパスワード
# type-param field type(most mapping the html input tag)
type: password
# required-true or false
@@ -212,7 +197,6 @@ params:
name:
zh-CN: 代理主机私钥
en-US: proxyPrivateKey
ja-JP: プロキシ秘密鍵
# type-param field type(most mapping the html input type)
type: textarea
placeholder: -----BEGIN RSA PRIVATE KEY-----
@@ -227,7 +211,6 @@ metrics:
i18n:
zh-CN: 系统基本信息
en-US: Basic Info
ja-JP: システム基礎情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
@@ -240,19 +223,16 @@ metrics:
i18n:
zh-CN: 主机名称
en-US: Host Name
ja-JP: ホスト名
- field: version
type: 1
i18n:
zh-CN: 操作系统版本
en-US: System Version
ja-JP: システムバージョン
- field: uptime
type: 1
i18n:
zh-CN: 启动时间
en-US: Uptime
ja-JP: アップタイム
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: ssh
# the config content when protocol is ssh
@@ -292,7 +272,6 @@ metrics:
i18n:
zh-CN: CPU 信息
en-US: CPU Info
ja-JP: CPU情報
priority: 1
fields:
- field: info
@@ -300,38 +279,32 @@ metrics:
i18n:
zh-CN: 型号
en-US: Info
ja-JP: バージョン
- field: cores
type: 0
i18n:
zh-CN: 核数
en-US: Cores
ja-JP: コア数
- field: interrupt
type: 0
i18n:
zh-CN: 中断数
en-US: Interrupt
ja-JP: 割り込み数
- field: load
type: 1
i18n:
zh-CN: 负载
en-US: Load
ja-JP: ロード
- field: context_switch
type: 0
i18n:
zh-CN: 上下文切换
en-US: Context Switch
ja-JP: コンテキストスイッチ
- field: usage
type: 0
unit: '%'
i18n:
zh-CN: 使用率
en-US: Usage
ja-JP: 使用率
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
# (可选)监控指标别名, 做为中间字段与采集数据字段和指标字段映射转换
aliasFields:
@@ -379,7 +352,6 @@ metrics:
i18n:
zh-CN: 内存信息
en-US: Memory Info
ja-JP: メモリ情報
priority: 2
fields:
- field: physmem
@@ -388,35 +360,30 @@ metrics:
i18n:
zh-CN: 物理内存
en-US: Physics Memory
ja-JP: 物理メモリ
- field: usermem
type: 0
unit: Mb
i18n:
zh-CN: 用户内存
en-US: User Program Memory
ja-JP: ユーザープログラムメモリ
- field: realmem
type: 0
unit: Mb
i18n:
zh-CN: 实际内存
en-US: Real Memory
ja-JP: 実際のメモリ
- field: availmem
type: 0
unit: Mb
i18n:
zh-CN: 可用内存
en-US: Available Memory
ja-JP: 使用可能なメモリ
- field: usage
type: 0
unit: '%'
i18n:
zh-CN: 内存使用率
en-US: Memory Usage
ja-JP: メモリ使用率
aliasFields:
- physmem
- usermem
@@ -462,7 +429,6 @@ metrics:
i18n:
zh-CN: 文件系统
en-US: Disk Free
ja-JP: ディスク情報
priority: 3
fields:
- field: filesystem
@@ -470,35 +436,30 @@ metrics:
i18n:
zh-CN: 文件系统
en-US: Filesystem
ja-JP: ファイルシステム
- field: used
type: 0
unit: Mb
i18n:
zh-CN: 已使用量
en-US: Used
ja-JP: 使用済み
- field: available
type: 0
unit: Mb
i18n:
zh-CN: 可用量
en-US: Available
ja-JP: 利用可能
- field: usage
type: 0
unit: '%'
i18n:
zh-CN: 使用率
en-US: Usage
ja-JP: 使用率
- field: mounted
type: 1
label: true
i18n:
zh-CN: 挂载点
en-US: Mounted
ja-JP: マウント
protocol: ssh
ssh:
host: ^_^host^_^
@@ -528,7 +489,6 @@ metrics:
i18n:
zh-CN: Top10 CPU 进程
en-US: Top10 CPU Process
ja-JP: トップ10 CPUプロセス
priority: 4
fields:
- field: pid
@@ -537,27 +497,23 @@ metrics:
i18n:
zh-CN: 进程ID
en-US: PID
ja-JP: プロセスID
- field: cpu_usage
type: 0
unit: '%'
i18n:
zh-CN: CPU占用率
en-US: CPU Usage
ja-JP: CPU使用率
- field: mem_usage
type: 0
unit: '%'
i18n:
zh-CN: 内存占用率
en-US: Memory Usage
ja-JP: メモリ使用率
- field: command
type: 1
i18n:
zh-CN: 执行命令
en-US: Command
ja-JP: 指令
protocol: ssh
ssh:
host: ^_^host^_^
@@ -587,7 +543,6 @@ metrics:
i18n:
zh-CN: Top10 内存进程
en-US: Top10 Memory Process
ja-JP: トップ10 メモリプロセス
priority: 5
fields:
- field: pid
@@ -596,27 +551,23 @@ metrics:
i18n:
zh-CN: 进程ID
en-US: PID
ja-JP: プロセスID
- field: mem_usage
type: 0
unit: '%'
i18n:
zh-CN: 内存占用率
en-US: Memory Usage
ja-JP: メモリ使用率
- field: cpu_usage
type: 0
unit: '%'
i18n:
zh-CN: CPU占用率
en-US: CPU Usage
ja-JP: CPU使用率
- field: command
type: 1
i18n:
zh-CN: 执行命令
en-US: Command
ja-JP: 指令
protocol: ssh
ssh:
host: ^_^host^_^
@@ -21,13 +21,11 @@ app: ftp
name:
zh-CN: FTP服务器
en-US: FTP Server
ja-JP: FTPサーバー
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 对 FTP 服务器的通用指标进行测量监控。<br>您可以点击 “<i>新建 FTP服务器</i>” 并进行配置,或者选择“<i>更多操作</i>”,导入已有配置。
en-US: Hertzbeat monitoring FTP server through general performance metric. You could click the "<i>New FTP server</i>" button and proceed with the configuration or import an existing setup through the "<i>More Actions</i>" menu.
zh-TW: Hertzbeat 對 FTP 伺服器的通用名額進行量測監控。<br>您可以點擊“<i>新建FTP伺服器</i>”並進行配寘,或者選擇“<i>更多操作</i>”,導入已有配寘。
ja-JP: Hertzbeat は FTPサーバーの一般的なメトリック監視します。<br>「<i>新規 FTPサーバー</i>」をクリックしてパラメタを設定した後、新規することができます。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/ftp
en-US: https://hertzbeat.apache.org/docs/help/ftp
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +61,6 @@ params:
name:
zh-CN: 用户名
en-US: Username
ja-JP: ユーザー名
type: text
limit: 50
required: false
@@ -74,7 +69,6 @@ params:
name:
zh-CN: 用户密码
en-US: Password
ja-JP: パスワード
# type-param field type(most mapping the html input tag)
type: password
required: false
@@ -83,7 +77,6 @@ params:
name:
zh-CN: 目录
en-US: Direction
ja-JP: ディレクション
type: text
limit: 100
required: true
@@ -91,7 +84,6 @@ params:
name:
zh-CN: 超时时间
en-US: Timeout
ja-JP: タイムアウト
type: number
range: '[0,100000]'
required: true
@@ -101,7 +93,6 @@ params:
name:
zh-CN: 启用SFTP
en-US: SFTP
ja-JP: SFTP利用
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -113,7 +104,6 @@ metrics:
i18n:
zh-CN: 概要
en-US: Basic
ja-JP: 基礎情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
@@ -125,14 +115,12 @@ metrics:
i18n:
zh-CN: 活动状态
en-US: Is Active
ja-JP: 活動ステータス
- field: responseTime
type: 0
unit: ms
i18n:
zh-CN: 响应时间
en-US: Response Time
ja-JP: 応答時間
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: ftp
# the config content when protocol is ftp
@@ -21,13 +21,11 @@ app: fullsite
name:
zh-CN: SiteMap全站
en-US: SITE MAP
ja-JP: SITE MAP
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 对网站全部页面的 URL 路径、HTTP 状态码、响应时间及请求反馈进行监测。由于一个网站可能有多个不同服务提供的页面,系统将采集网站暴露的<a class='help_module_content' href='https://en.wikipedia.org/wiki/Site_map'>网站地图(SiteMap)</a>来监控全站。<span class='help_module_span'><br>⚠️注意:此功能需要您的网站支持 XML 和 TXT 格式的 SiteMap。</span>
en-US: HertzBeat monitoring all pages of website by URL path, HTTP status code, response times and request feedback. Due to the possibility that a website may have multiple pages provided by different services, Hertzbeat will collect <a class='help_module_content' href='https://en.wikipedia.org/wiki/Site_map'>SiteMap</a> which exposed by the website to monitor the entire site. <span class='help_module_span'><br>⚠️Note:HertzBeat support SiteMap in XML or TXT format.</span>
zh-TW: HertzBeat對網站全部頁面的URL路徑、HTTP狀態碼、回應時間及請求迴響進行監測。 由於一個網站可能有多個不同服務提供的頁面,系統將採集網站暴露的<a class='help_ module_ content' href='https://en.wikipedia.org/wiki/Site_map'>網站地圖(SiteMap</a>來監控全站。<span class='help_ module_ span'> <br>⚠️注意:此功能需要您的網站支持XML和TXT格式的SiteMap。</span>
ja-JP: HertzBeat はウェブサイトの全てのURL、HTTPステータスコード、応答時間などのメトリック監視します。ウェブサイトには、異なるサービスによって提供される複数のページが存在する可能性があるため、システムはウェブサイトによって公開される<a class='help_ module_ content' href='https://en.wikipedia.org/wiki/Site_map'>SiteMap</a>を収集して監視します。<span class='help_ module_ span'> <br>⚠️注意:この機能を使用するには、ウェブサイトがXMLおよびTXT形式のSiteMapをサポートしている必要があります。</span>
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/guide/
en-US: https://hertzbeat.apache.org/docs/help/guide/
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -62,7 +58,6 @@ params:
name:
zh-CN: 网站地图
en-US: Site Map
ja-JP: Site Map
type: text
limit: 200
required: true
@@ -71,7 +66,6 @@ params:
name:
zh-CN: 启用HTTPS
en-US: HTTPS
ja-JP: HTTPS利用
# type-param field type(boolean mapping the html switch tag)
type: boolean
required: true
@@ -83,7 +77,6 @@ metrics:
i18n:
zh-CN: 概要信息
en-US: Summary
ja-JP: 概要
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
@@ -96,26 +89,22 @@ metrics:
i18n:
zh-CN: URL
en-US: URL
ja-JP: URL
- field: statusCode
type: 1
i18n:
zh-CN: 响应状态码
en-US: Status Code
ja-JP: ステータスコード
- field: responseTime
type: 0
unit: ms
i18n:
zh-CN: 响应时间
en-US: Response Time
ja-JP: 応答時間
- field: errorMsg
type: 1
i18n:
zh-CN: 错误信息
en-US: Error Msg
ja-JP: エラーメッセージ
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# the config content when protocol is http
@@ -21,13 +21,11 @@ app: greenplum
name:
zh-CN: GreenPlum 数据库
en-US: GreenPlum DB
ja-JP: GreenPlum データベース
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-jdbc'> JDBC 协议</a> 通过配置 SQL 对 GreenPlum 数据库的通用性能指标 (basic、state、activity etc) 进行采集监控,支持版本为 GreenPlum 6.23.0+。<br>您可以点击“<i>新建 GreenPlum 数据库</i>”并进行配置,或者选择“<i>更多操作</i>”,导入已有配置。
en-US: HertzBeat uses <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-jdbc'> JDBC Protocol</a> to configure SQL for collecting general metrics of GreenPlum database (basic、state、activity etc). Supported version is GreenPlum 6.23.0+. <br>You can click "<i>New GreenPlum Database</i>" and configure it, or select "<i>More Action</i>" to import the existing configuration.
zh-TW: HertzBeat 使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-jdbc'> JDBC 協議</a> 通過配置 SQL 對 GreenPlum 數據庫的通用性能指標 (basic、state、activity etc)進行采集監控,支持版本爲 GreenPlum 6.23.0+。<br>您可以點擊“<i>新建 GreenPlum 數據庫</i>”並進行配置,或者選擇“<i>更多操作</i>”,導入已有配置。
ja-JP: Hertzbeat は <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-jdbc'> JDBCプロトコルを介して</a> GreenPlum データベース(6.23.0+)の一般的なパフォーマンスのメトリック監視します。<br>「<i>新規 GreenPlum データベース</i>」をクリックしてパラメタを設定した後、新規することができます。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/greenplum
en-US: https://hertzbeat.apache.org/docs/help/greenplum
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -63,7 +59,6 @@ params:
name:
zh-CN: 查询超时时间(ms)
en-US: Query Timeout(ms)
ja-JP: クエリタイムアウト(ms)
type: number
range: '[400,200000]'
required: false
@@ -73,7 +68,6 @@ params:
name:
zh-CN: 数据库名称
en-US: Database Name
ja-JP: データベース名
type: text
defaultValue: postgres
required: false
@@ -81,7 +75,6 @@ params:
name:
zh-CN: 用户名
en-US: Username
ja-JP: ユーザー名
type: text
limit: 50
required: false
@@ -89,14 +82,12 @@ params:
name:
zh-CN: 密码
en-US: Password
ja-JP: パスワード
type: password
required: false
- field: url
name:
zh-CN: URL
en-US: URL
ja-JP: URL
type: text
required: false
hide: true
@@ -108,7 +99,6 @@ metrics:
i18n:
zh-CN: 基本信息
en-US: Basic Info
ja-JP: 基礎情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
@@ -121,31 +111,26 @@ metrics:
i18n:
zh-CN: 服务器版本
en-US: Server Version
ja-JP: サーバーのバージョン
- field: port
type: 1
i18n:
zh-CN: 端口
en-US: Port
ja-JP: ポート
- field: server_encoding
type: 1
i18n:
zh-CN: 服务器编码
en-US: Server Encoding
ja-JP: サーバーのエンコード
- field: data_directory
type: 1
i18n:
zh-CN: 数据目录
en-US: Data Directory
ja-JP: データディレクトリ
- field: max_connections
type: 0
i18n:
zh-CN: 最大连接数
en-US: Max Connections
ja-JP: 最大コネクション数
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: jdbc
# the config content when protocol is jdbc
@@ -170,7 +155,6 @@ metrics:
i18n:
zh-CN: 状态信息
en-US: State Info
ja-JP: 状態情報
priority: 1
fields:
- field: db_name
@@ -179,55 +163,47 @@ metrics:
i18n:
zh-CN: 数据库名称
en-US: Database Name
ja-JP: データベース名
- field: conflicts
type: 0
unit: times
i18n:
zh-CN: 冲突次数
en-US: Conflicts
ja-JP: コンフリクト回数
- field: deadlocks
type: 0
unit: times
i18n:
zh-CN: 死锁次数
en-US: Deadlocks
ja-JP: デッドロック回数
- field: blks_read
type: 0
unit: blocks per second
i18n:
zh-CN: 读取块
en-US: Blocks Read
ja-JP: 読み取られたブロック
- field: blks_hit
type: 0
unit: blocks per second
i18n:
zh-CN: 命中块
en-US: Blocks Hit
ja-JP: ヒットブロック
- field: blk_read_time
type: 0
unit: ms
i18n:
zh-CN: 读取时间
en-US: Read Time
ja-JP: 読み取られタイム
- field: blk_write_time
type: 0
unit: ms
i18n:
zh-CN: 写入时间
en-US: Write Time
ja-JP: 書き込まれタイム
- field: stats_reset
type: 1
i18n:
zh-CN: 统计重置
en-US: Stats Reset
ja-JP: 統計リセット
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -245,7 +221,6 @@ metrics:
i18n:
zh-CN: 活动信息
en-US: Activity Info
ja-JP: 活動情報
priority: 2
fields:
- field: running
@@ -254,7 +229,6 @@ metrics:
i18n:
zh-CN: 运行中
en-US: Running
ja-JP: 実行中
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -272,7 +246,6 @@ metrics:
i18n:
zh-CN: 资源配置
en-US: Resource Config
ja-JP: リソース設定
priority: 3
fields:
- field: work_mem
@@ -281,40 +254,34 @@ metrics:
i18n:
zh-CN: 工作内存
en-US: Work Memory
ja-JP: ワークメモリ
- field: shared_buffers
type: 0
unit: MB
i18n:
zh-CN: 共享缓冲区
en-US: Shared Buffers
ja-JP: 共有バッファ
- field: autovacuum
type: 1
i18n:
zh-CN: 自动清理
en-US: Auto Vacuum
ja-JP: オートバキューム
- field: max_connections
type: 0
i18n:
zh-CN: 最大连接数
en-US: Max Connections
ja-JP: 最大コネクション数
- field: effective_cache_size
type: 0
unit: MB
i18n:
zh-CN: 有效缓存大小
en-US: Effective Cache Size
ja-JP: キャッシュサイズ
- field: wal_buffers
type: 0
unit: MB
i18n:
zh-CN: WAL缓冲区
en-US: WAL Buffers
ja-JP: WALバッファ
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -332,7 +299,6 @@ metrics:
i18n:
zh-CN: 连接信息
en-US: Connection Info
ja-JP: コネクション情報
priority: 4
fields:
- field: active
@@ -340,7 +306,6 @@ metrics:
i18n:
zh-CN: 活动连接
en-US: Active Connection
ja-JP: 活躍的なコネクション
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -358,7 +323,6 @@ metrics:
i18n:
zh-CN: 连接状态
en-US: Connection State
ja-JP: コネクションステート
priority: 5
fields:
- field: state
@@ -367,13 +331,11 @@ metrics:
i18n:
zh-CN: 状态
en-US: State
ja-JP: 状態
- field: num
type: 0
i18n:
zh-CN: 数量
en-US: Num
ja-JP: 数量
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -391,7 +353,6 @@ metrics:
i18n:
zh-CN: 连接数据库
en-US: Connection Db
ja-JP: コネクションデータベース
priority: 6
fields:
- field: db_name
@@ -400,13 +361,11 @@ metrics:
i18n:
zh-CN: 数据库名称
en-US: Database Name
ja-JP: データベース名
- field: active
type: 0
i18n:
zh-CN: 活动连接
en-US: Active Connection
ja-JP: 活躍的なコネクション
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -424,7 +383,6 @@ metrics:
i18n:
zh-CN: 元组信息
en-US: Tuple Info
ja-JP: 組情報
priority: 7
fields:
- field: fetched
@@ -432,31 +390,26 @@ metrics:
i18n:
zh-CN: 获取次数
en-US: Fetched
ja-JP: フェッチ回数
- field: returned
type: 0
i18n:
zh-CN: 返回次数
en-US: Returned
ja-JP: 戻る回数
- field: inserted
type: 0
i18n:
zh-CN: 插入次数
en-US: Inserted
ja-JP: インサート回数
- field: updated
type: 0
i18n:
zh-CN: 更新次数
en-US: Updated
ja-JP: 更新回数
- field: deleted
type: 0
i18n:
zh-CN: 删除次数
en-US: Deleted
ja-JP: 削除回数
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -474,7 +427,6 @@ metrics:
i18n:
zh-CN: 临时文件
en-US: Temp File
ja-JP: 一時ファイル
priority: 8
fields:
- field: db_name
@@ -483,20 +435,17 @@ metrics:
i18n:
zh-CN: 数据库名称
en-US: Database Name
ja-JP: データベース名
- field: num
type: 0
i18n:
zh-CN: 次数
en-US: Num
ja-JP: 数量
- field: size
type: 0
unit: B
i18n:
zh-CN: 大小
en-US: Size
ja-JP: サイズ
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -514,7 +463,6 @@ metrics:
i18n:
zh-CN: 锁信息
en-US: Lock Info
ja-JP: ロック情報
priority: 9
fields:
- field: db_name
@@ -523,21 +471,18 @@ metrics:
i18n:
zh-CN: 数据库名称
en-US: Database Name
ja-JP: データベース名
- field: conflicts
type: 0
unit: times
i18n:
zh-CN: 冲突次数
en-US: Conflicts
ja-JP: コンフリクト回数
- field: deadlocks
type: 0
unit: times
i18n:
zh-CN: 死锁次数
en-US: Deadlocks
ja-JP: デッドロック回数
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -555,7 +500,6 @@ metrics:
i18n:
zh-CN: 慢查询
en-US: Slow Sql
ja-JP: スロークエリ
priority: 10
fields:
- field: sql_text
@@ -564,33 +508,28 @@ metrics:
i18n:
zh-CN: SQL语句
en-US: SQL Text
ja-JP: SQL
- field: calls
type: 0
i18n:
zh-CN: 调用次数
en-US: Calls
ja-JP: コール回数
- field: rows
type: 0
i18n:
zh-CN: 行数
en-US: Rows
ja-JP:
- field: avg_time
type: 0
unit: ms
i18n:
zh-CN: 平均时间
en-US: Avg Time
ja-JP: 平均時間
- field: total_time
type: 0
unit: ms
i18n:
zh-CN: 总时间
en-US: Total Time
ja-JP: 合計時間
aliasFields:
- query
- calls
@@ -618,7 +557,6 @@ metrics:
i18n:
zh-CN: 事务信息
en-US: Transaction Info
ja-JP: トランザクション情報
priority: 11
fields:
- field: db_name
@@ -627,21 +565,18 @@ metrics:
i18n:
zh-CN: 数据库名称
en-US: Database Name
ja-JP: データベース名
- field: commits
type: 0
unit: times
i18n:
zh-CN: 提交次数
en-US: Commits
ja-JP: コミット回数
- field: rollbacks
type: 0
unit: times
i18n:
zh-CN: 回滚次数
en-US: Rollbacks
ja-JP: ロールバック回数
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -659,7 +594,6 @@ metrics:
i18n:
zh-CN: 冲突信息
en-US: Conflicts Info
ja-JP: コンフリクト情報
priority: 12
fields:
- field: db_name
@@ -668,37 +602,31 @@ metrics:
i18n:
zh-CN: 数据库名称
en-US: Database Name
ja-JP: データベース名
- field: tablespace
type: 0
i18n:
zh-CN: 表空间
en-US: Tablespace
ja-JP: 表領域
- field: lock
type: 0
i18n:
zh-CN:
en-US: Lock
ja-JP: ロック
- field: snapshot
type: 0
i18n:
zh-CN: 快照
en-US: Snapshot
ja-JP: スナップショット
- field: bufferpin
type: 0
i18n:
zh-CN: 缓冲区
en-US: Bufferpin
ja-JP: バッファ
- field: deadlock
type: 0
i18n:
zh-CN: 死锁
en-US: Deadlock
ja-JP: デッドロック
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -716,7 +644,6 @@ metrics:
i18n:
zh-CN: 缓存命中率
en-US: Cache Hit Ratio
ja-JP: キャッシュ命中率
priority: 13
fields:
- field: db_name
@@ -725,14 +652,12 @@ metrics:
i18n:
zh-CN: 数据库名称
en-US: Database Name
ja-JP: データベース名
- field: ratio
type: 0
unit: '%'
i18n:
zh-CN: 命中率
en-US: Hit Ratio
ja-JP: 命中率
aliasFields:
- blks_hit
- blks_read
@@ -756,7 +681,6 @@ metrics:
i18n:
zh-CN: Checkpoint信息
en-US: Checkpoint Info
ja-JP: チェックポイント情報
priority: 14
fields:
- field: checkpoint_sync_time
@@ -765,14 +689,12 @@ metrics:
i18n:
zh-CN: Checkpoint同步时间
en-US: Checkpoint Sync Time
ja-JP: チェックポイント同期時間
- field: checkpoint_write_time
type: 0
unit: ms
i18n:
zh-CN: Checkpoint写入时间
en-US: Checkpoint Write Time
ja-JP: Checkpoint書き込まれた時間
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -790,7 +712,6 @@ metrics:
i18n:
zh-CN: Buffer信息
en-US: Buffer Info
ja-JP: バッファ情報
priority: 15
fields:
- field: allocated
@@ -798,31 +719,26 @@ metrics:
i18n:
zh-CN: 已分配
en-US: Allocated
ja-JP: 割り当てバッファ
- field: fsync_calls_by_backend
type: 0
i18n:
zh-CN: 后端进程直接执行的文件同步调用次数
en-US: Fsync Calls By Backend
ja-JP: バックエンド同期コール回数
- field: written_directly_by_backend
type: 0
i18n:
zh-CN: 后台写入到数据文件
en-US: Written Directly By Backend
ja-JP: バックエンドによる直接書き込まれたファイル
- field: written_by_background_writer
type: 0
i18n:
zh-CN: 后台写入
en-US: Written By Background Writer
ja-JP: バックグラウンドライターに書き込まれた
- field: written_during_checkpoints
type: 0
i18n:
zh-CN: 检查点期间写入
en-US: Written During Checkpoints
ja-JP: チェックポイント中の書き込み
protocol: jdbc
jdbc:
host: ^_^host^_^
@@ -14,45 +14,51 @@
# limitations under the License.
# The monitoring type categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
# 监控类型所属类别:service-应用服务 program-应用程序 db-数据库 custom-自定义 os-操作系统 bigdata-大数据 mid-中间件 webserver-web服务器 cache-缓存 cn-云原生 network-网络监控等等
category: bigdata
# The monitoring type eg: linux windows tomcat mysql aws...
# 监控类型 eg: linux windows tomcat mysql aws...
app: greptime
# The monitoring i18n name
# 监控类型国际化名称
name:
zh-CN: GreptimeDB
en-US: GreptimeDB
ja-JP: GreptimeDB
# The description and help of this monitoring type
# 监控类型的帮助描述信息
help:
zh-CN: HertzBeat 对 GreptimeDB 时序数据库进行监控。<br><span class='help_module_span'><a class='help_module_content' https://docs.greptime.com/user-guide/operations/monitoring'>点击查看开启步骤</a>。</span>
en-US: HertzBeat monitors the GreptimeDB time series database. <br><span class='help_module_span'><a class='help_module_content' https://docs.greptime.com/user-guide/operations/monitoring'>Click to view the activation steps</a>. </span>
zh-TW: HertzBeat 對 GreptimeDB 時序資料庫進行監控。<br><span class='help_module_span'><a class='help_module_content' https://docs.greptime.com/user-guide/operations/monitoring'>點擊查看開啓步驟</a>。</span>
ja-JP: HertzBeat は GreptimeDB 時系列データベースを監視します。<br><span class='help_module_span'><a class='help_module_content' https://docs.greptime.com/user-guide/operations/monitoring'>クリックしてガイドを見ます</a>。</span>
helpLink:
zh-CN: https://hertzbeat.com/zh-cn/docs/help/greptimedb
en-US: https://hertzbeat.com/docs/help/greptimedb
# 监控所需输入参数定义(根据定义渲染页面UI)
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
# field-变量字段标识符
- field: host
# name-param field display i18n name
# name-参数字段显示名称
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
# type-字段类型,样式(大部分映射input标签type属性)
type: host
# required-true or false
# required-是否是必输项 true-必填 false-可选
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
# type-字段类型,样式(大部分映射input标签type属性)
type: number
# when type is number, range is required
# 当type为number时,用range表示范围
range: '[0,65535]'
# default value
defaultValue: 4000
@@ -61,28 +67,28 @@ params:
name:
zh-CN: 查询超时时间
en-US: Query Timeout
ja-JP: クエリタイムアウト
type: number
required: false
# hide param-true or false
# 是否隐藏字段 true or false
hide: true
defaultValue: 6000
# collect metrics config list
# 采集指标配置列表
metrics:
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_app_version
i18n:
zh-CN: greptime 应用版本
en-US: greptime_app_version
ja-JP: greptime応用バージョン
priority: 0
fields:
- field: short_version
i18n:
zh-CN: 版本
en-US: version
ja-JP: バージョン
type: 1
label: true
protocol: http
@@ -95,18 +101,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_catalog_schema_count
i18n:
zh-CN: 目录 模式 数量
en-US: greptime_catalog_schema_count
ja-JP: greptime_catalog_schema_count
priority: 1
fields:
- field: value
i18n:
zh-CN: 数量
en-US: count
ja-JP: 数量
type: 1
calculates:
- name=.name
@@ -120,25 +125,23 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_meta_cache_container_cache_get
i18n:
zh-CN: 缓存容器缓存获取
en-US: greptime_meta_cache_container_cache_get
ja-JP: キャッシュゲット
priority: 2
fields:
- field: name
i18n:
zh-CN: 名称
en-US: name
ja-JP: キー
type: 1
label: true
- field: value
i18n:
zh-CN: 指标值
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -150,25 +153,23 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_meta_cache_container_cache_miss
i18n:
zh-CN: 缓存容器缓存未命中
en-US: greptime_meta_cache_container_cache_miss
ja-JP: キャッシュミス
priority: 3
fields:
- field: name
i18n:
zh-CN: 名称
en-US: name
ja-JP: キー
type: 1
label: true
- field: value
i18n:
zh-CN: 指标值
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -180,25 +181,23 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_mito_region_count
i18n:
zh-CN: mito 引擎区域数量
en-US: greptime_mito_region_count
ja-JP: mitoエンジンのリージョン数量
priority: 4
fields:
- field: worker
i18n:
zh-CN: 工作线程
en-US: worker
ja-JP: ワーカースレッド
type: 1
label: true
- field: value
i18n:
zh-CN: 数量
en-US: count
ja-JP: 数量
type: 1
protocol: http
http:
@@ -210,25 +209,23 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_mito_write_stall_total
i18n:
zh-CN: mito 引擎写入延迟总数
en-US: greptime_mito_write_stall_total
ja-JP: mitoエンジンの書き込み遅延の合計
priority: 5
fields:
- field: worker
i18n:
zh-CN: 工作线程
en-US: worker
ja-JP: ワーカースレッド
type: 1
label: true
- field: value
i18n:
zh-CN: 数量
en-US: total
ja-JP: 数量
type: 1
protocol: http
http:
@@ -240,18 +237,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_meta_create_catalog_counter
i18n:
zh-CN: 创建目录计数器
en-US: greptime_meta_create_catalog_counter
ja-JP: 目録カウンター
priority: 6
fields:
- field: value
i18n:
zh-CN: 指标值
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -263,24 +259,22 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_runtime_threads_alive
i18n:
zh-CN: 运行时线程存活
en-US: greptime_runtime_threads_alive
ja-JP: ランタイムのアライブスレッド
priority: 7
fields:
- field: thread_name
i18n:
zh-CN: 线程名称
en-US: thread_name
ja-JP: スレッド名
type: 1
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -292,24 +286,22 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_runtime_threads_idle
i18n:
zh-CN: 运行时线程空闲
en-US: greptime_runtime_threads_idle
ja-JP: ランタイムのidleスレッド
priority: 8
fields:
- field: thread_name
i18n:
zh-CN: 线程名称
en-US: thread_name
ja-JP: スレッド名
type: 1
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -321,36 +313,32 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_servers_http_requests_total
i18n:
zh-CN: greptime 服务 HTTP 请求总数
en-US: greptime_servers_http_requests_total
ja-JP: HTTPリクエストの合計
priority: 9
fields:
- field: code
i18n:
zh-CN: code
en-US: code
ja-JP: コード
type: 1
- field: method
i18n:
zh-CN: method
en-US: method
ja-JP: メソッド
type: 1
- field: path
i18n:
zh-CN: path
en-US: path
ja-JP: パス
type: 1
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -362,18 +350,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_servers_mysql_connection_count
i18n:
zh-CN: greptime 服务 MySQL 连接数
en-US: greptime_servers_mysql_connection_count
ja-JP: MySQLのコネクション数
priority: 10
fields:
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -385,18 +372,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: greptime_servers_postgres_connection_count
i18n:
zh-CN: greptime 服务 Postgres 连接数
en-US: greptime_servers_postgres_connection_count
ja-JP: Postgresのコネクション数
priority: 11
fields:
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -408,18 +394,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: process_cpu_seconds_total
i18n:
zh-CN: 进程 CPU 时间总数
en-US: process_cpu_seconds_total
ja-JP: CPU時間合計
priority: 12
fields:
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -431,18 +416,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: process_max_fds
i18n:
zh-CN: 进程最大文件描述符
en-US: process_max_fds
ja-JP: プロセスの最大ファイル記述子
priority: 13
fields:
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -454,18 +438,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: process_open_fds
i18n:
zh-CN: 进程打开文件描述符
en-US: process_open_fds
ja-JP: プロセスのオープン中ファイル記述子
priority: 14
fields:
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -477,18 +460,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: process_resident_memory_bytes
i18n:
zh-CN: 进程常驻内存字节
en-US: process_resident_memory_bytes
ja-JP: プロセスの常駐メモリバイト
priority: 15
fields:
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -500,18 +482,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: process_start_time_seconds
i18n:
zh-CN: 进程启动时间(秒)
en-US: process_start_time_seconds
ja-JP: プロセスのアップタイム(秒)
priority: 16
fields:
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -523,18 +504,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: process_threads
i18n:
zh-CN: 进程线程
en-US: process_threads
ja-JP: プロセススレッド
priority: 17
fields:
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -546,18 +526,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: process_virtual_memory_bytes
i18n:
zh-CN: 进程虚拟内存字节
en-US: process_virtual_memory_bytes
ja-JP: プロセスの仮想メモリバイト
priority: 18
fields:
- field: value
i18n:
zh-CN: value
en-US: value
ja-JP:
type: 1
protocol: http
http:
@@ -569,24 +548,22 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: raft_engine_log_entry_count
i18n:
zh-CN: raft 引擎日志条目数量
en-US: raft_engine_log_entry_count
ja-JP: raftエンジンのログエントリー数
priority: 19
fields:
- field: type
i18n:
zh-CN: 类型
en-US: type
ja-JP: タイプ
type: 1
- field: value
i18n:
zh-CN: 数量
en-US: count
ja-JP: 数量
type: 1
protocol: http
http:
@@ -598,24 +575,22 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: raft_engine_log_file_count
i18n:
zh-CN: raft 引擎日志文件数量
en-US: raft_engine_log_file_count
ja-JP: raftエンジンのログファイル数
priority: 20
fields:
- field: type
i18n:
zh-CN: 类型
en-US: type
ja-JP: タイプ
type: 1
- field: value
i18n:
zh-CN: 数量
en-US: count
ja-JP: 数量
type: 1
protocol: http
http:
@@ -627,18 +602,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: raft_engine_memory_usage
i18n:
zh-CN: raft 引擎内存占用
en-US: raft_engine_memory_usage
ja-JP: raftエンジンのメモリ使用率
priority: 21
fields:
- field: value
i18n:
zh-CN: 占用
en-US: total
ja-JP: 使用率
type: 1
protocol: http
http:
@@ -650,24 +624,22 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: raft_engine_recycled_file_count
i18n:
zh-CN: raft 引擎回收文件数量
en-US: raft_engine_recycled_file_count
ja-JP: raftエンジンのリサイクルファイル数
priority: 22
fields:
- field: type
i18n:
zh-CN: 类型
en-US: type
ja-JP: タイプ
type: 1
- field: value
i18n:
zh-CN: 数量
en-US: count
ja-JP: 数量
type: 1
protocol: http
http:
@@ -679,18 +651,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: sys_jemalloc_allocated
i18n:
zh-CN: jemalloc 分配
en-US: sys_jemalloc_allocated
ja-JP: jemallocの割り当て
priority: 23
fields:
- field: value
i18n:
zh-CN: 数量
en-US: value
ja-JP: 数量
type: 1
protocol: http
http:
@@ -702,18 +673,17 @@ metrics:
parseType: prometheus
# metrics - cluster_node_status
# 监控指标 - cluster_node_status
- name: sys_jemalloc_resident
i18n:
zh-CN: jemalloc 常驻
en-US: sys_jemalloc_resident
ja-JP: jemallocの常駐
priority: 24
fields:
- field: value
i18n:
zh-CN: 数量
en-US: value
ja-JP: 数量
type: 1
protocol: http
http:
@@ -21,13 +21,11 @@ app: h3c_switch
name:
zh-CN: 华三通用交换机
en-US: H3C Switch
ja-JP: H3Cスイッチングハブ
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-snmp'> SNMP 协议</a> 对 华三交换机 的通用指标(可用性,系统信息,端口流量等)进行采集监控。<br>您可以点击 “<i>新建 华三通用交换机</i>” 并进行配置SNMP相关参数添加,或者选择“<i>更多操作</i>”,导入已有配置。
en-US: HertzBeat uses <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-snmp'> SNMP Protocol</a> to monitoring H3C Switch general performance metrics. <br>You can click the "<i>New H3C Switch</i>" button and config snmp params to add monitor or import an existing setup through the "<i>More Actions</i>" menu.
zh-TW: Hertzbeat 使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-snmp'> SNMP 協議</a> 對 華三交換機 的通用指標(可用性,系統信息,端口流量等)進行采集監控。<br>您可以點擊 “<i>新建 華三通用交換機</i>” 並進行配置SNMP相關參數添加,或者選擇“<i>更多操作</i>”,導入已有配置。
ja-JP: Hertzbeat は <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-snmp'> SNMP プロトコルを介して</a> H3Cスイッチングハブの一般的なメトリック監視します。<br>「<i>新規 H3Cスイッチングハブ</i>」をクリックしてSNMPなどのパラメタを設定した後、新規することができます。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/h3c_switch
en-US: https://hertzbeat.apache.org/docs/help/h3c_switch
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +61,6 @@ params:
name:
zh-CN: SNMP 版本
en-US: SNMP Version
ja-JP: SNMPバージョン
# type-param field type(radio mapping the html radio tag)
type: radio
# required-true or false
@@ -84,7 +79,6 @@ params:
name:
zh-CN: SNMP 团体字
en-US: SNMP Community
ja-JP: SNMPコミュニティ
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -104,7 +98,6 @@ params:
name:
zh-CN: SNMP username
en-US: SNMP username
ja-JP: SNMPユーザー名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -123,7 +116,6 @@ params:
name:
zh-CN: SNMP contextName
en-US: SNMP contextName
ja-JP: SNMPコンテキスト名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -142,7 +134,6 @@ params:
name:
zh-CN: SNMP authPassword
en-US: SNMP authPassword
ja-JP: SNMP認証パスワード
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -161,7 +152,6 @@ params:
name:
zh-CN: authPassword 加密方式
en-US: authPassword Encryption
ja-JP: 認証暗号
# type-param field type(radio mapping the html radio tag)
type: radio
# required-true or false
@@ -182,7 +172,6 @@ params:
name:
zh-CN: SNMP privPassphrase
en-US: SNMP privPassphrase
ja-JP: SNMPパスワードフレーズ
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -201,7 +190,6 @@ params:
name:
zh-CN: privPassword 加密方式
en-US: privPassword Encryption
ja-JP: パスワードの暗号
# type-param field type(radio mapping the html radio tag)
type: radio
# required-true or false
@@ -222,7 +210,6 @@ params:
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
ja-JP: タイムアウト(ms)
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -240,7 +227,6 @@ metrics:
i18n:
zh-CN: 系统信息
en-US: System Info
ja-JP: システム情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
@@ -252,38 +238,32 @@ metrics:
i18n:
zh-CN: 主机名称
en-US: Host Name
ja-JP: ホスト名
- field: descr
type: 1
i18n:
zh-CN: 描述信息
en-US: Description
ja-JP: 説明
- field: uptime
type: 1
i18n:
zh-CN: 运行时长
en-US: Uptime
ja-JP: アップタイム
- field: location
type: 1
i18n:
zh-CN: 位置
en-US: Location
ja-JP: 位置
- field: contact
type: 1
i18n:
zh-CN: 联系人
en-US: Contact
ja-JP: 連絡先
- field: responseTime
type: 0
unit: ms
i18n:
zh-CN: 响应时间
en-US: Response Time
ja-JP: 応答時間
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: snmp
# the config content when protocol is snmp
@@ -325,7 +305,6 @@ metrics:
i18n:
zh-CN: 接口详情
en-US: Interfaces Detail
ja-JP: ネットワークカード詳細
priority: 1
fields:
- field: index
@@ -333,78 +312,66 @@ metrics:
i18n:
zh-CN: 编号
en-US: Index
ja-JP: 番号
- field: descr
type: 1
label: true
i18n:
zh-CN: 接口名称
en-US: Interface Name
ja-JP: ネットワークカード名
- field: mtu
type: 0
unit: 'byte'
i18n:
zh-CN: MTU
en-US: MTU
ja-JP: MTU
- field: speed
type: 0
unit: 'MB/s'
i18n:
zh-CN: 接口速率
en-US: Interface Speed
ja-JP: ネットワークカード速度
- field: in_octets
type: 0
unit: 'MByte'
i18n:
zh-CN: 入流量
en-US: In Octets
ja-JP: 受信バイト数
- field: in_discards
type: 0
i18n:
zh-CN: 入丢包数
en-US: In Discards
ja-JP: 受信パケットロス数
- field: in_errors
type: 0
i18n:
zh-CN: 入错包数
en-US: In Errors
ja-JP: 受信異常パケット数
- field: out_octets
type: 0
unit: 'MByte'
i18n:
zh-CN: 出流量
en-US: Out Octets
ja-JP: 送信バイト数
- field: out_discards
type: 0
i18n:
zh-CN: 出丢包数
en-US: Out Discards
ja-JP: 送信パケットロス数
- field: out_errors
type: 0
i18n:
zh-CN: 出错包数
en-US: Out Errors
ja-JP: 送信異常パケット数
- field: admin_status
type: 1
i18n:
zh-CN: 配置状态
en-US: Config Status
ja-JP: 設定ステータス
- field: oper_status
type: 1
i18n:
zh-CN: 当前状态
en-US: Current Status
ja-JP: ステータス
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- ifIndex
@@ -21,13 +21,11 @@ app: hadoop
name:
zh-CN: Apache Hadoop
en-US: Apache Hadoop
ja-JP: Apache Hadoop
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 使用<a class='help_module_content' href='https://baijiahao.baidu.com/s?id=1605937053950156833&wfr=spider&for=pc'> JMX 协议</a>对 Hadoop 的 JVM 虚拟机的通用性能指标(memory pool,限JDK8及以下的code cache、class loading、thread)进行采集监控。<br><span class='help_module_span'>⚠️注意:您需要在 Hadoop 应用开启 JMX 服务, <a class='help_module_content' href='https://hertzbeat.apache.org/zh-cn/docs/help/hadoop#hadoop%E5%BA%94%E7%94%A8%E5%BC%80%E5%90%AFjmx%E5%8D%8F%E8%AE%AE%E6%AD%A5%E9%AA%A4'>点击查看开启步骤</a>。</span>
en-US: "HertzBeat monitors general performance metrics(memory pool, class loading, thread) of Hadoop VMware through <a class='help_module_content' href='https://zh.wikipedia.org/JMX'>JMX protocol</a>. <br><span class='help_module_span'>⚠️Note: You should enable the JMX service in Hadoop application, and the metric of code cache is only available to JDK8 and below.<a class='help_module_content' href='https://hertzbeat.apache.org/docs/help/hadoop#hadoop%E5%BA%94%E7%94%A8%E5%BC%80%E5%90%AFjmx%E5%8D%8F%E8%AE%AE%E6%AD%A5%E9%AA%A4'>Click here to view the specific steps.</a></span>"
zh-TW: HertzBeat使用<a class='help_ module_ content' href='https://baijiahao.baidu.com/s?id=1605937053950156833&wfr=spider&for=pc'> JMX協定</a>對Hadoop的JVM虛擬機器的通用性能指標(memory pool,限JDK8及以下的code cache、class loading、thread)進行採集監控。<br><span class='help_ module_ span'> ⚠️ ️注意:您需要在Hadoop應用開啟JMX服務,<a class='help_ module_ content' href='https://hertzbeat.apache.org/zh-cn/docs/help/hadoop#hadoop%E5%BA%94%E7%94%A8%E5%BC%80%E5%90%AFjmx%E5%8D%8F%E8%AE%AE%E6%AD%A5%E9%AA%A4'>點擊查看開啟步驟</a>。</span>
ja-JP: HertzBeatは <a class='help_module_content' href='https://baijiahao.baidu.com/s?id=1605937053950156833&wfr=spider&for=pc'> JMXプロトコルを介して</a> HadoopのJava仮想マシンの一般的なパフォーマンスのメトリックを監視します。<br><span class='help_module_span'> ⚠️注意:Hadoop で JMX サービスを有効にする必要があります。<a class='help_module_content' href=' https://hertzbeat.apache.org/zh-cn/docs/help/hadoop#hadoop%E5%BA%94%E7%94%A8%E5%BC%80%E5%90%AFjmx%E5%8D%8F%E8%AE%AE%E6%AD%A5%E9%AA%A4'>クリックしてガイドを見ます</a>。</span>
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/hadoop/
en-US: https://hertzbeat.apache.org/docs/help/hadoop/
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +61,6 @@ params:
name:
zh-CN: JMX URL
en-US: JMX URL
ja-JP: JMX URL
# type-param field type(most mapping the html input type)
type: text
# required-true or false
@@ -80,7 +75,6 @@ params:
name:
zh-CN: 用户名
en-US: Username
ja-JP: ユーザー名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -95,7 +89,6 @@ params:
name:
zh-CN: 密码
en-US: Password
ja-JP: パスワード
# type-param field type(most mapping the html input tag)
type: password
# required-true or false
@@ -109,7 +102,6 @@ metrics:
i18n:
zh-CN: 虚拟机基础信息
en-US: JVM Basic
ja-JP: Java仮想マシン基礎情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
@@ -121,26 +113,22 @@ metrics:
i18n:
zh-CN: 名称
en-US: Vm Name
ja-JP: 仮想マシン名
- field: VmVendor
type: 1
i18n:
zh-CN: 厂商
en-US: Vm Vendor
ja-JP: 仮想マシンベンダー
- field: VmVersion
type: 1
i18n:
zh-CN: 版本
en-US: Vm Version
ja-JP: 仮想マシンバージョン
- field: Uptime
type: 0
unit: ms
i18n:
zh-CN: 运行时长
en-US: Up time
ja-JP: アップタイム
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: jmx
# the config content when protocol is jmx
@@ -160,7 +148,6 @@ metrics:
i18n:
zh-CN: 内存池
en-US: Memory Pool
ja-JP: メモリプール
fields:
- field: name
type: 1
@@ -168,35 +155,30 @@ metrics:
i18n:
zh-CN: 指标名称
en-US: Name
ja-JP: 指標名
- field: committed
type: 0
unit: MB
i18n:
zh-CN: 已分配内存
en-US: Committed
ja-JP: コミットメモリ
- field: init
type: 0
unit: MB
i18n:
zh-CN: 初始化内存
en-US: Init
ja-JP: イニシャルメモリ
- field: max
type: 0
unit: MB
i18n:
zh-CN: 最大内存
en-US: Max
ja-JP: 最大メモリ
- field: used
type: 0
unit: MB
i18n:
zh-CN: 已使用内存
en-US: Used
ja-JP: 使用済みメモリ
units:
- committed=B->MB
- init=B->MB
@@ -233,32 +215,27 @@ metrics:
i18n:
zh-CN: 本地代码缓冲区
en-US: Code Cache
ja-JP: コードキャッシュ
fields:
- field: committed
type: 0
i18n:
zh-CN: 已分配内存
en-US: Committed
ja-JP: コミットメモリ
- field: init
type: 0
i18n:
zh-CN: 初始化内存
en-US: Init
ja-JP: イニシャルメモリ
- field: max
type: 0
i18n:
zh-CN: 最大内存
en-US: Max
ja-JP: 最大メモリ
- field: used
type: 0
i18n:
zh-CN: 已使用内存
en-US: Used
ja-JP: 使用済みメモリ
aliasFields:
- Usage->committed
- Usage->init
@@ -285,7 +262,6 @@ metrics:
i18n:
zh-CN: 类加载信息
en-US: Class Loading
ja-JP: クラスローディング情報
# collect metrics content
fields:
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
@@ -294,19 +270,16 @@ metrics:
i18n:
zh-CN: 当前已加载类数量
en-US: Loaded Class Count
ja-JP: ロードされたクラス数
- field: TotalLoadedClassCount
type: 0
i18n:
zh-CN: 已加载类总数量
en-US: Total Loaded Class Count
ja-JP: ロードされたクラス総数
- field: UnloadedClassCount
type: 0
i18n:
zh-CN: 未加载类总数量
en-US: Unloaded Class Count
ja-JP: アンロードされたクラス総数
protocol: jmx
jmx:
host: ^_^host^_^
@@ -321,7 +294,6 @@ metrics:
i18n:
zh-CN: 线程信息
en-US: Thread
ja-JP: スレッド情報
# collect metrics content
fields:
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
@@ -330,39 +302,33 @@ metrics:
i18n:
zh-CN: 已启动线程总数
en-US: Total Started Thread Count
ja-JP: スレッド総数
- field: ThreadCount
type: 0
i18n:
zh-CN: 活跃线程数
en-US: Thread Count
ja-JP: 活躍スレッド数
- field: PeakThreadCount
type: 0
i18n:
zh-CN: 最大峰值线程数
en-US: Peak Thread Count
ja-JP: 最大スレッド数
- field: DaemonThreadCount
type: 0
i18n:
zh-CN: 活跃守护线程数
en-US: Daemon Thread Count
ja-JP: デーモンスレッド数
- field: CurrentThreadUserTime
type: 0
unit: s
i18n:
zh-CN: 线程占用的CPU时间(用户态)
en-US: Current Thread User Time
ja-JP: 現在のスレッドユーザー時間
- field: CurrentThreadCpuTime
type: 0
unit: s
i18n:
zh-CN: 线程占用的CPU时间
en-US: Current Thread CPU Time
ja-JP: 現在のスレッドシステム時間
units:
- CurrentThreadUserTime=NS->S
- CurrentThreadCpuTime=NS->S
@@ -21,13 +21,12 @@ app: hbase_master
name:
zh-CN: Apache Hbase Master
en-US: Apache Hbase Master
ja-JP: Apache Hbase Master
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 对 Hbase 数据库 Master 节点监控指标进行监控。<br>您可以点击 “<i>新建 Apache Hbase Master</i>” 并进行配置,或者选择“<i>更多操作</i>”,导入已有配置。
en-US: Hertzbeat monitors the Master node monitoring indicators of the Hbase database. <br>You can click "<i>New Apache Hbase Master</i>" to configure, or select "<i>More Actions</i>" to import an existing configuration.
zh-TW: Hertzbeat 對 Hbase 數據庫 Master 节點監控指標進行監控。<br>您可以點擊 “<i>新建 Apache Hbase Master</i>” 並進行配置,或者選擇“<i>更多操作</i>”,導入已有配置。
ja-JP: Hertzbeat は HbaseデータベースのMasterノードの一般的なメトリック監視します。<br>「<i>新規 Apache Hbase Master</i>」をクリックしてパラメタを設定した後、新規することができます。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/hbase_master/
en-US: https://hertzbeat.apache.org/docs/help/hbase_master/
@@ -39,7 +38,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +48,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +62,6 @@ params:
name:
zh-CN: 查询超时时间
en-US: Query Timeout
ja-JP: クエリタイムアウト
# type-param field type(most mapping the html input type)
type: number
# required-true or false
@@ -80,7 +76,6 @@ params:
name:
zh-CN: 启用HTTPS
en-US: HTTPS
ja-JP: HTTPS
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -92,7 +87,6 @@ metrics:
i18n:
zh-CN: Master服务信息
en-US: Master Service Info
ja-JP: Masterサービス情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
@@ -104,25 +98,21 @@ metrics:
i18n:
zh-CN: 活跃RegionServer数量
en-US: numRegionServers
ja-JP: 活躍的なRegionServer数
- field: numDeadRegionServers
type: 0
i18n:
zh-CN: 异常RegionServer数量
en-US: numDeadRegionServers
ja-JP: 異常的なRegionServer数
- field: averageLoad
type: 0
i18n:
zh-CN: 集群平均负载
en-US: averageLoad
ja-JP: 平均ロード
- field: clusterRequests
type: 0
i18n:
zh-CN: 集群请求数量
en-US: clusterRequests
ja-JP: クラスターのリクエスト数
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- $.numRegionServers
@@ -147,7 +137,6 @@ metrics:
i18n:
zh-CN: Region In Transition 信息
en-US: Region In Transition Info
ja-JP: Region In Transition 情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 1
@@ -159,19 +148,16 @@ metrics:
i18n:
zh-CN: 当前的 RIT 数量
en-US: ritCount
ja-JP: RIT数
- field: ritCountOverThreshold
type: 0
i18n:
zh-CN: 超过阈值的 RIT 数量
en-US: ritCountOverThreshold
ja-JP: 閾値を超えたRIT数
- field: ritOldestAge
type: 0
i18n:
zh-CN: 最老的RIT的持续时间
en-US: ritOldestAge
ja-JP: 最古のRITのスパン
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- $.ritCount
@@ -194,7 +180,6 @@ metrics:
i18n:
zh-CN: 基础信息
en-US: Basic Info
ja-JP: 基礎情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 2
@@ -206,57 +191,48 @@ metrics:
i18n:
zh-CN: 当前活跃RegionServer列表
en-US: liveRegionServers
ja-JP: 活躍的なRegionServer
- field: deadRegionServers
type: 1
i18n:
zh-CN: 当前离线RegionServer列表
en-US: deadRegionServers
ja-JP: オフラインRegionServer
- field: zookeeperQuorum
type: 1
i18n:
zh-CN: Zookeeper列表
en-US: zookeeperQuorum
ja-JP: zookeeper定足数
- field: masterHostName
type: 1
i18n:
zh-CN: Master节点
en-US: masterHostName
ja-JP: Masterホスト名
- field: BalancerCluster_num_ops
type: 0
i18n:
zh-CN: 集群负载均衡次数
en-US: BalancerCluster_num_ops
ja-JP: クラスターのロードバランシング回数
- field: numActiveHandler
type: 0
i18n:
zh-CN: RPC句柄数
en-US: numActiveHandler
ja-JP: RPCハンドル数
- field: receivedBytes
type: 0
unit: 'MB'
i18n:
zh-CN: 集群接收数据量(MB)
en-US: receivedBytes
ja-JP: 受信バイト
- field: sentBytes
type: 0
unit: 'MB'
i18n:
zh-CN: 集群发送数据量(MB)
en-US: sentBytes
ja-JP: 送信バイト
- field: clusterRequests
type: 0
i18n:
zh-CN: 集群总请求数量
en-US: clusterRequests
ja-JP: クラスターのリクエスト数
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- $.beans[?(@.name == "Hadoop:service=HBase,name=Master,sub=Server")].['tag.liveRegionServers']
@@ -21,13 +21,11 @@ app: hbase_regionserver
name:
zh-CN: Apache Hbase RegionServer
en-US: Apache Hbase RegionServer
ja-JP: Apache Hbase RegionServer
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 对 Hbase 数据库 RegionServer 节点监控指标进行监控。<br>您可以点击 “<i>新建 Apache Hbase RegionServer</i>” 并进行配置,或者选择“<i>更多操作</i>”,导入已有配置。
en-US: Hertzbeat monitors the RegionServer node monitoring indicators of the Hbase database. <br>You can click "<i>New Apache Hbase RegionServer</i>" to configure, or select "<i>More Actions</i>" to import an existing configuration.
zh-TW: Hertzbeat 對 Hbase 數據庫 RegionServer 节點監控指標進行監控。<br>您可以點擊 “<i>新建 Apache Hbase RegionServer</i>” 並進行配置,或者選擇“<i>更多操作</i>”,導入已有配置。
ja-JP: Hertzbeat は HbaseデータベースのRegionServerノードの一般的なメトリック監視します。<br>「<i>新規 Apache Hbase RegionServer</i>」をクリックしてパラメタを設定した後、新規することができます。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/hbase_regionserver/
@@ -40,7 +38,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -51,7 +48,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -66,7 +62,6 @@ params:
name:
zh-CN: 查询超时时间
en-US: Query Timeout
ja-JP: クエリタイムアウト
# type-param field type(most mapping the html input type)
type: number
# required-true or false
@@ -81,7 +76,6 @@ params:
name:
zh-CN: 启用HTTPS
en-US: HTTPS
ja-JP: HTTPS
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -93,7 +87,6 @@ metrics:
i18n:
zh-CN: RegionServer 服务信息
en-US: RegionServer Service Info
ja-JP: RegionServerサービス情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
@@ -105,28 +98,24 @@ metrics:
i18n:
zh-CN: Region数量
en-US: regionCount
ja-JP: Region数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: readRequestCount
type: 0
i18n:
zh-CN: 重启集群后的读请求数量
en-US: readRequestCount
ja-JP: 読み取りリクエスト数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: writeRequestCount
type: 0
i18n:
zh-CN: 重启集群后的写请求数量
en-US: writeRequestCount
ja-JP: 書き込みリクエスト数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: averageRegionSize
type: 0
i18n:
zh-CN: 平均Region大小
en-US: averageRegionSize
ja-JP: Regionの平均サイズ
unit: 'MB'
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: totalRequestCount
@@ -134,126 +123,108 @@ metrics:
i18n:
zh-CN: 全部请求数量
en-US: totalRequestCount
ja-JP: リクエスト総数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ScanTime_num_ops
type: 0
i18n:
zh-CN: Scan 请求总量
en-US: ScanTime_num_ops
ja-JP: Scan操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: Append_num_ops
type: 0
i18n:
zh-CN: Append 请求量
en-US: Append_num_ops
ja-JP: Append操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: Increment_num_ops
type: 0
i18n:
zh-CN: Increment请求量
en-US: Increment_num_ops
ja-JP: Increment操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: Get_num_ops
type: 0
i18n:
zh-CN: Get 请求量
en-US: Get_num_ops
ja-JP: Get操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: Delete_num_ops
type: 0
i18n:
zh-CN: Delete 请求量
en-US: Delete_num_ops
ja-JP: Delete操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: Put_num_ops
type: 0
i18n:
zh-CN: Put 请求量
en-US: Put_num_ops
ja-JP: Put操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ScanTime_mean
type: 0
i18n:
zh-CN: 平均 Scan 请求时间
en-US: ScanTime_mean
ja-JP: Scan操作の平均時間
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ScanTime_min
type: 0
i18n:
zh-CN: 最小 Scan 请求时间
en-US: ScanTime_min
ja-JP: Scan操作の最小時間
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ScanTime_max
type: 0
i18n:
zh-CN: 最大 Scan 请求时间
en-US: ScanTime_max
ja-JP: Scan操作の最大時間
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ScanSize_mean
type: 0
i18n:
zh-CN: 平均 Scan 请求大小
en-US: ScanSize_mean
ja-JP: Scan操作の平均サイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ScanSize_min
type: 0
i18n:
zh-CN: 最小 Scan 请求大小
en-US: ScanSize_min
ja-JP: Scan操作の最小サイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ScanSize_max
type: 0
i18n:
zh-CN: 最大 Scan 请求大小
en-US: ScanSize_max
ja-JP: Scan操作の最大サイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: slowPutCount
type: 0
i18n:
zh-CN: 慢操作次数/Put
en-US: slowPutCount
ja-JP: スローPut操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: slowGetCount
type: 0
i18n:
zh-CN: 慢操作次数/Get
en-US: slowGetCount
ja-JP: スローGet操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: slowAppendCount
type: 0
i18n:
zh-CN: 慢操作次数/Append
en-US: slowAppendCount
ja-JP: スローAppend操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: slowIncrementCount
type: 0
i18n:
zh-CN: 慢操作次数/Increment
en-US: slowIncrementCount
ja-JP: スローIncrement操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: slowDeleteCount
type: 0
i18n:
zh-CN: 慢操作次数/Delete
en-US: slowDeleteCount
ja-JP: スローDelete操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: blockCacheSize
type: 0
@@ -261,42 +232,36 @@ metrics:
i18n:
zh-CN: 缓存块内存占用大小
en-US: blockCacheSize
ja-JP: ブロックキャッシュのサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: blockCacheCount
type: 0
i18n:
zh-CN: 缓存块数量_Block Cache 中的 Block 数量
en-US: blockCacheCount
ja-JP: ブロックキャッシュ数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: blockCacheExpressHitPercent
type: 0
i18n:
zh-CN: 读缓存命中率
en-US: blockCacheExpressHitPercent
ja-JP: ブロックキャッシュ命中率
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: memStoreSize
type: 0
i18n:
zh-CN: Memstore 大小
en-US: memStoreSize
ja-JP: Memstoreサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: FlushTime_num_ops
type: 0
i18n:
zh-CN: RS写磁盘次数/MemStore Flush 写磁盘次数
en-US: FlushTime_num_ops
ja-JP: MemStore Flush操作回数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: flushQueueLength
type: 0
i18n:
zh-CN: Region Flush 队列长度
en-US: flushQueueLength
ja-JP: Region Flushキューの長さ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: flushedCellsSize
type: 0
@@ -304,21 +269,18 @@ metrics:
i18n:
zh-CN: flush到磁盘大小
en-US: flushedCellsSize
ja-JP: flushedサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: storeCount
type: 0
i18n:
zh-CN: Store 个数
en-US: storeCount
ja-JP: Store数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: storeFileCount
type: 0
i18n:
zh-CN: Storefile 个数
en-US: storeFileCount
ja-JP: Storeファイル数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: storeFileSize
type: 0
@@ -326,42 +288,36 @@ metrics:
i18n:
zh-CN: Storefile 大小
en-US: storeFileSize
ja-JP: Storeファイルサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: compactionQueueLength
type: 0
i18n:
zh-CN: Compaction 队列长度
en-US: compactionQueueLength
ja-JP: Compactionキューの長さ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: percentFilesLocal
type: 0
i18n:
zh-CN: Region 的 HFile 位于本地 HDFS data node的比例
en-US: percentFilesLocal
ja-JP: Regionのローカルファイルのパーセント
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: percentFilesLocalSecondaryRegions
type: 0
i18n:
zh-CN: Region 副本的 HFile 位于本地 HDFS data node的比例
en-US: percentFilesLocalSecondaryRegions
ja-JP: Secondary Regionのローカルファイルのパーセント
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: hlogFileCount
type: 0
i18n:
zh-CN: WAL 文件数量
en-US: hlogFileCount
ja-JP: WALファイル数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: hlogFileSize
type: 0
i18n:
zh-CN: WAL 文件大小
en-US: hlogFileSize
ja-JP: WALファイルサイズ
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- $.regionCount
@@ -458,7 +414,6 @@ metrics:
i18n:
zh-CN: RegionServer IPC 信息
en-US: RegionServer IPC Info
ja-JP: RegionServer IPC 情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 1
@@ -470,28 +425,24 @@ metrics:
i18n:
zh-CN: RPC句柄数
en-US: numActiveHandler
ja-JP: RPCハンドル数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: NotServingRegionException
type: 0
i18n:
zh-CN: NotServingRegionException 异常数量
en-US: NotServingRegionException
ja-JP: NotServingRegionException
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: RegionMovedException
type: 0
i18n:
zh-CN: RegionMovedException异常数量
en-US: RegionMovedException
ja-JP: RegionMovedException
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: RegionTooBusyException
type: 0
i18n:
zh-CN: RegionTooBusyException异常数量
en-US: RegionTooBusyException
ja-JP: RegionTooBusyException
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- $.numActiveHandler
@@ -517,7 +468,6 @@ metrics:
i18n:
zh-CN: RegionServer JVM 信息
en-US: RegionServer JVM Info
ja-JP: RegionServer Java仮想マシン情報
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 2
@@ -530,7 +480,6 @@ metrics:
i18n:
zh-CN: 进程使用的非堆内存大小
en-US: MemNonHeapUsedM
ja-JP: 使用済みのノンヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemNonHeapCommittedM
type: 0
@@ -538,7 +487,6 @@ metrics:
i18n:
zh-CN: 进程 commit 的非堆内存大小
en-US: MemNonHeapCommittedM
ja-JP: コミットのノンヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemHeapUsedM
type: 0
@@ -546,7 +494,6 @@ metrics:
i18n:
zh-CN: 进程使用的堆内存大小
en-US: MemHeapUsedM
ja-JP: 使用済みのヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemHeapCommittedM
type: 0
@@ -554,7 +501,6 @@ metrics:
i18n:
zh-CN: 进程 commit 的堆内存大小
en-US: MemHeapCommittedM
ja-JP: コミットのヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemHeapMaxM
type: 0
@@ -562,7 +508,6 @@ metrics:
i18n:
zh-CN: 进程最大的堆内存大小
en-US: MemHeapMaxM
ja-JP: 最大のヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemMaxM
type: 0
@@ -570,14 +515,12 @@ metrics:
i18n:
zh-CN: 进程最大内存大小
en-US: MemMaxM
ja-JP: 最大のメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: GcCount
type: 0
i18n:
zh-CN: Young GC次数
en-US: GcCount
ja-JP: GC回数
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- $.MemNonHeapUsedM
@@ -21,13 +21,11 @@ app: hdfs_datanode
name:
zh-CN: Apache HDFS DataNode
en-US: Apache HDFS DataNode
ja-JP: Apache HDFS DataNode
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 对 HDFS DataNode 节点监控指标进行监控。<br>您可以点击 “<i>新建 Apache HDFS DataNode</i>” 并进行配置,或者选择“<i>更多操作</i>”,导入已有配置。
en-US: Hertzbeat monitors the HDFS DataNode metrics. <br>You can click "<i>New Apache HDFS DataNode</i>" to configure, or select "<i>More Actions</i>" to import an existing configuration.
zh-TW: Hertzbeat 對 HDFS DataNode 節點監控指標進行監控。<br>您可以點擊 “<i>新建 Apache HDFS DataNode</i>” 並進行配置,或者選擇“<i>更多操作</i>”,導入已有配置。
ja-JP: Hertzbeat は HDFS DataNodeの一般的なメトリック監視します。<br>「<i>新規 Apache HDFS DataNode</i>」をクリックしてパラメタを設定した後、新規することができます。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/hdfs_datanode/
@@ -40,7 +38,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -51,7 +48,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -66,7 +62,6 @@ params:
name:
zh-CN: 查询超时时间
en-US: Query Timeout
ja-JP: クエリタイムアウト
# type-param field type(most mapping the html input type)
type: number
# required-true or false
@@ -91,7 +86,6 @@ metrics:
i18n:
zh-CN: DataNode HDFS使用量
en-US: DfsUsed
ja-JP: 使用済みのHDFS容量
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: Remaining
type: 0
@@ -99,7 +93,6 @@ metrics:
i18n:
zh-CN: DataNode HDFS剩余空间
en-US: Remaining
ja-JP: 使用可能のHDFS容量
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: Capacity
type: 0
@@ -107,7 +100,6 @@ metrics:
i18n:
zh-CN: DataNode HDFS空间总量
en-US: Capacity
ja-JP: HDFS容量合計
units:
- DfsUsed=B->GB
- Remaining=B->GB
@@ -142,70 +134,60 @@ metrics:
i18n:
zh-CN: JVM 当前已经使用的 NonHeapMemory 的大小
en-US: MemNonHeapUsedM
ja-JP: 使用済みのノンヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemNonHeapCommittedM
type: 0
i18n:
zh-CN: JVM 配置的 NonHeapCommittedM 的大小
en-US: MemNonHeapCommittedM
ja-JP: コミットのノンヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemHeapUsedM
type: 0
i18n:
zh-CN: JVM 当前已经使用的 HeapMemory 的大小
en-US: MemHeapUsedM
ja-JP: 使用済みのヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemHeapCommittedM
type: 0
i18n:
zh-CN: JVM HeapMemory 提交大小
en-US: MemHeapCommittedM
ja-JP: コミットのヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemHeapMaxM
type: 0
i18n:
zh-CN: JVM 配置的 HeapMemory 的大小
en-US: MemHeapMaxM
ja-JP: 配置のヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: MemMaxM
type: 0
i18n:
zh-CN: JVM 运行时可以使用的最大内存大小
en-US: MemMaxM
ja-JP: 最大のヒープメモリサイズ
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ThreadsRunnable
type: 0
i18n:
zh-CN: 处于 RUNNABLE 状态的线程数量
en-US: ThreadsRunnable
ja-JP: RUNNABLE スレッド数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ThreadsBlocked
type: 0
i18n:
zh-CN: 处于 BLOCKED 状态的线程数量
en-US: ThreadsBlocked
ja-JP: BLOCKED スレッド数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ThreadsWaiting
type: 0
i18n:
zh-CN: 处于 WAITING 状态的线程数量
en-US: ThreadsWaiting
ja-JP: WAITING スレッド数
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: ThreadsTimedWaiting
type: 0
i18n:
zh-CN: 处于 TIMED WAITING 状态的线程数量
en-US: ThreadsTimedWaiting
ja-JP: TIMED WAITING スレッド数
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- $.MemNonHeapUsedM
@@ -250,7 +232,6 @@ metrics:
i18n:
zh-CN: 启动时间
en-US: StartTime
ja-JP: 起動時間
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- $.beans[?(@.name == "java.lang:type=Runtime")].StartTime
@@ -17,8 +17,22 @@
package org.apache.hertzbeat.manager.service;
import org.apache.hertzbeat.common.entity.manager.Bulletin;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.hertzbeat.common.entity.manager.Monitor;
import org.apache.hertzbeat.common.entity.manager.Bulletin;
import org.apache.hertzbeat.manager.pojo.dto.BulletinMetricsData;
import org.apache.hertzbeat.manager.dao.BulletinDao;
import org.apache.hertzbeat.manager.service.impl.BulletinServiceImpl;
import org.apache.hertzbeat.warehouse.store.realtime.RealTimeDataReader;
@@ -32,21 +46,6 @@ import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
/**
* Test case for {@link BulletinService}
*/
@@ -146,17 +145,14 @@ public class BulletinServiceTest {
fields.put("1", List.of("1", "2"));
bulletin.setFields(fields);
BulletinMetricsData.BulletinMetricsDataBuilder contentBuilder = BulletinMetricsData.builder();
Monitor monitor = new Monitor();
when(bulletinDao.findById(any(Long.class))).thenReturn(java.util.Optional.of(bulletin));
when(realTimeDataReader.getCurrentMetricsData(any(), any(String.class))).thenReturn(null);
when(monitorService.getMonitor(any(Long.class))).thenReturn(null);
assertTrue(bulletinService.buildBulletinMetricsData(any(Long.class)).getContent().isEmpty());
when(monitorService.getMonitor(1L)).thenReturn(monitor);
assertFalse(bulletinService.buildBulletinMetricsData(2L).getContent().isEmpty());
when(monitorService.getMonitor(any(Long.class))).thenReturn(monitor);
assertNotNull(bulletinService.buildBulletinMetricsData(any(Long.class)));
}
@Test
@@ -98,37 +98,29 @@ public class OpenTelemetryConfig {
}
/**
* Provides default OpenTelemetry configuration that always executes.
* Provides an AutoConfigurationCustomizerProvider to tailor the auto-configured OpenTelemetry SDK.
* This includes setting up GrepTimeDB exporters for logs and traces, and customizing the resource.
* Active only if 'greptime.enabled' is true.
*
* @param greptimeProperties Configuration for GrepTimeDB.
* @return AutoConfigurationCustomizerProvider instance.
*/
@Bean
public AutoConfigurationCustomizerProvider defaultOtelCustomizer() {
log.info("Applying default OpenTelemetry SDK customizations.");
@ConditionalOnProperty(name = "warehouse.store.greptime.enabled", havingValue = "true")
public AutoConfigurationCustomizerProvider greptimeOtelCustomizer(GreptimeProperties greptimeProperties) {
log.info("GreptimeDB is enabled. Applying OpenTelemetry SDK customizations.");
return providerCustomizer -> providerCustomizer
.addPropertiesCustomizer(sdkConfigProperties -> {
Map<String, String> newProperties = new HashMap<>();
newProperties.put("otel.metrics.exporter", "none");
newProperties.put("otel.traces.exporter", "none");
newProperties.put("otel.traces.exporter", "otlp");
newProperties.put("otel.logs.exporter", "none");
return newProperties;
})
.addResourceCustomizer((resource, configProperties) -> {
log.info("Customizing auto-configured OpenTelemetry Resource with service name: {}.", HERTZBEAT_SERVICE_NAME);
return resource.merge(Resource.builder().put(SERVICE_NAME, HERTZBEAT_SERVICE_NAME).build());
});
}
/**
* Provides GrepTimeDB-specific OpenTelemetry configuration when enabled.
*/
@Bean
@ConditionalOnProperty(name = "warehouse.store.greptime.enabled", havingValue = "true")
public AutoConfigurationCustomizerProvider greptimeOtelCustomizer(GreptimeProperties greptimeProperties) {
log.info("GreptimeDB is enabled. Applying additional OpenTelemetry SDK customizations for GrepTimeDB.");
return providerCustomizer -> providerCustomizer
.addPropertiesCustomizer(sdkConfigProperties -> {
Map<String, String> newProperties = new HashMap<>();
newProperties.put("otel.traces.exporter", "otlp");
return newProperties;
})
.addSpanExporterCustomizer((originalSpanExporter, configProperties) -> {
String traceEndpoint = greptimeProperties.httpEndpoint() + "/v1/otlp/v1/traces";
-226
View File
@@ -1,226 +0,0 @@
---
title: Announcement of Apache Hertzbeat 1.7.1 Release
author: tomsun28
author_title: tomsun28
author_url: https://github.com/zhangshenghang
author_image_url: https://avatars.githubusercontent.com/u/24788200?s=400&v=4
tags: [opensource, release]
keywords: [open source monitoring system, alerting system, Hertzbeat, release]
---
Dear Community Members,
We are thrilled to announce the official release of Apache Hertzbeat version 1.7.1!
## Downloads and Documentation
- **Apache Hertzbeat 1.7.1 Download Link**: <https://hertzbeat.apache.org/docs/download>
- **Apache Hertzbeat Documentation**: <https://hertzbeat.apache.org/docs/>
## Major Updates
### New Features and Enhancements
- Added support for Siemens PLC S7 protocol (#3194)
- Introduced support for Hikvision, Dahua, and Uniview devices (#3211, #3214)
- Support for Uptime Kuma and Zabbix alert sources (#3312, #3317)
- Service discovery enhancements: Eureka, Consul, and DNS SD (#3323, #3326, #3328)
- Alert grouping and inhibition support (#3206)
- System notification as a new alert method (#3275)
- Collector-side alerting capability (#2693)
- Initial logging module implemented (#3218)
- Integrated OpenTelemetry for logs and traces (#3319)
- Added PushGateway support for pushing metrics (#3204)
- Enhanced Monitor List and Detail UIs (#3199, #3200)
- Improved Grafana configuration priorities and exception handling (#3241)
- Optimized prompts, UI labels, and display titles (#3270, #3289)
- Introduced an AI bot for assistance (#3285)
- Added i18n support for AI bot (#3330)
### Bug Fixes
- Fixed whitespace issue in instance filtering for alert expressions (#3276)
- Corrected incorrect webhook alert template (#3265)
- Fixed incorrect pendingTimeouts calculation in HashedWheelTimer (#3174)
- Resolved historical data display issues in VictoriaMetrics charts (#3248, #3264, #3297)
- Fixed async job cancellation not removing cached jobs (#3240)
- Fixed UI issue with bulletin indicator selection (#3201)
- Fixed Prometheus metric response parsing errors (#3274)
- Resolved Collector OOM error (#3295)
- Fixed frontend title showing “Not page name” when filtered by monitor type (#3289)
### Refactoring and Optimization
- Unified usage of label instead of tag (#3278)
- Refactored alert datasource calculations (#3253)
- Optimized Kafka collection logic and increased test coverage (#3189)
- Improved DnsCollectTest status code logic (#3209)
- Refactored HTTP service discovery implementation (#3300)
- Defaulted to UTF-8 encoding (#3315)
- Removed potential CVE vulnerability action (#3303)
### Tests and Quality
- Added unit tests for:
- AlertInhibitController (#3183)
- XML response parsing (#3212)
- PeriodicAlertCalculator (#3304)
- Added E2E tests for:
- JDBC common collection (#3273)
- Redis collector (#3283)
- Kubernetes monitoring (#3280)
### Documentation Enhancements
- Help and usage docs:
- Alert Center, Alert Silence, Alarm Inhibition (#3181, #3229, #3206)
- Metrics collection workflow blog (#3195)
- Spring Boot 2.x/3.x monitoring config (#3231)
- Grafana dashboard setup (#3238)
- Upgrade guide (EN & CN) (#3302)
- Spring Boot auto practice use case (EN & CN) (#3293, #3298)
- Alert integration help documentation (#3308)
- Style and maintenance:
- Code style check documentation (#3232)
- Dead link checker improvements (#3302)
- Markdown formatting fixes and lint config updates (#3310)
- Internationalization:
- Japanese docs for README, ActiveMQ, Airflow, AlmaLinux (#3329, #3333, #3339, #3343)
## Acknowledgements
Special thanks to the following community members for their collaborative efforts:
> @LinuxSuRen @gagaradio @boyucjz @MasamiYui @tomsun28 @Aias00 @zhangshenghang @zqr10159 @LiuTianyou @a-little-fool @Calvin979
> @LL-LIN @JuJinPark @xiaomizhou2 @leo-934 @Rancho-7 @pwallk @bigcyy @sarthakeash @KevinLLF @PengJingzhao @Cyanty @markguo123
## What's Changed
- fix: Ai is a typo by @LinuxSuRen in #3176
- [Doc] Modify the error records in the document by @zhangshenghang in #3178
- [bug]bugfix:fix bug for package import error by @PengJingzhao in #3180
- [doc] add help documentation for Alarms Center by @bigcyy in #3181
- [docs] add collector user guide by @sarthakeash in #3187
- [bugfix] Modify inconsistent icons by @MasamiYui in #3190
- [doc] add blog bout How Does Metrics Collection Work by @JuJinPark in #3195
- [improve] update monitor detail ui by @tomsun28 in #3199
- [doc] update new hertzbeat ppmc by @tomsun28 in #3191
- [improve] update monitor list ui by @tomsun28 in #3200
- update download info by @Aias00 in #3203
- [bugfix] fix bulletin indicator selection status error by @bigcyy in #3201
- [improve] optimize kafka collection logic and expand test coverage by @Rancho-7 in #3189
- [improve] support the use of time expressions in HTTP payloads by @LiuTianyou in #3192
- [improve] i18n Portuguese by @LiuTianyou in #3193
- support plc s7 protocol for siemens by @boyucjz in #3194
- [doc] add doc for alarm grouping and alarm inhibit by @LiuTianyou in #3206
- [improve] optimize `DnsCollectTest` with status code. by @Rancho-7 in #3209
- [doc] archive version docs by @tomsun28 in #3207
- [feature]Implementation of Hikvision camera monitoring and http monitoring xml parsing function by @zqr10159 in #3211
- [test]add test for controller AlertInhibitController by @PengJingzhao in #3183
- [test] hertzbeat-collector: add unit test for XML response parsing by @zqr10159 in #3212
- add a Pushgateway to push module by @leo-934 in #3204
- [feature]add support for Dahua and Uniview devices by @zqr10159 in #3214
- [Doc] Fix dead link by @zhangshenghang in #3227
- [feature]A preliminary logging module implementation by @zqr10159 in #3218
- [Doc] Modify the YML configuration parameters for Spring Boot 2.0/3.0 monitoring by @Cyanty in #3231
- [Doc] Add Blog by @zhangshenghang in #3224
- [doc] add alerting silence doc. by @a-little-fool in #3229
- [doc] code style check by @a-little-fool in #3232
- [bugfix]: Fix the issue where pendingTimeouts may be incorrect in the HashedWheelTimer. by @gagaradio in #3174
- [doc] add code-style-check zh-ch. by @a-little-fool in #3236
- [doc]update Grafana dashboard setup instructions by @zqr10159 in #3238
- [bugfix] Added jobContentCache.remove(jobId) to cancelAsyncCollectJob by @bigcyy in #3240
- [doc] add new release 1.7.0 blog by @tomsun28 in #3237
- [improve] Adjust Grafana configuration priority hierarchy and optimize API request exception handling by @Cyanty in #3241
- switch to online parser & add query datasource by @leo-934 in #3215
- [feat] enable label-based filtering and selection for monitoring thresholds by @bigcyy in #3223
- [doc] add new contributors to wall by @tomsun28 in #3243
- fix UriComponentsBuilder in PromqlQueryExecutor by @leo-934 in #3244
- [Feature] Add log mcp for java by @zhangshenghang in #3254
- [bugfix] fix a remote command execution. by @a-little-fool in #3250
- [refactor] Alert datasource calculate by @MasamiYui in #3253
- [bugfix] Resolve incorrect display of detailed information in Prometheus task history monitoring charts under VictoriaMetrics. by @KevinLLF in #3248
- [doc] add new contributor in wall by @tomsun28 in #3259
- [bugfix] Set the prometheus monitoring time and correct historical data queries (#3264) by @Cyanty in #3264
- [bugfix] Wrong webhook alert template by @MasamiYui in #3265
- [bugfix] correct instance filtering regex in RealTimeAlertCalculator by @bigcyy in #3269
- [feature] Support Collector Alarm by @pwallk in #2693
- [feature] add Maven Wrapper scripts by @zhangshenghang in #3271
- [webapp] update header logo style by @tomsun28 in #3272
- [Improve] optimize prompt by @zhangshenghang in #3270
- [bugfix] fix the prometheus metric response data parsing is abnormal by @LiuTianyou in #3274
- [feature] new alert supports reminding through system notifications by @LiuTianyou in #3275
- [bugfix] support no-whitespace alert expressions in instance filtering by @bigcyy in #3276
- [refactor] refact tag to label code by @tomsun28 in #3278
- [doc] update contributors wall by @tomsun28 in #3281
- [improve] Add jdbc common collect e2e code (#3273) by @Cyanty in #3273
- [improve] Add E2E tests for Redis collector by @KevinLLF in #3283
- [Feature]Support AI bot by @zhangshenghang in #3285
- [bugfix]: page title show "Not page name" when filter monitor list by type by @LiuTianyou in #3289
- [Task] Set local database as default file server provider by @MasamiYui in #3282
- [doc] update doc, usecase blog and help doc by @tomsun28 in #3286
- [e2e] add e2e test for k8s monitor by @LiuTianyou in #3280
- [webapp] try reduce memory growth and fix crash by @tomsun28 in #3292
- [Doc] Add springboot auto practice usecase by @Cyanty in #3293
- [bugfix] fix collector direct oom by @tomsun28 in #3295
- [Doc] Add English doc for springboot auto practice usecase by @Cyanty in #3298
- [bugfix] enables support for VictoriaMetrics in cluster mode within HertzBeat by @bigcyy in #3297
- [improve] Optimize the way of Dead Link Check by @Cyanty in #3302
- [docs] Add Chinese and English versions of the Hertzbeat upgrade guide by @markguo123 in #3294
- [refactor] Remove the possible CVE-2025-30066 security vulnerability action and ignore the 500 code for link check by @Cyanty in #3303
- [Improve] Add unit test for PeriodicAlertCalculator by @MasamiYui in #3304
- [docs] Correct Markdown formatting and update lint config to enable local checking by @bigcyy in #3310
- [docs] add help documentation for alert integration by @bigcyy in #3308
- [feature] Support Uptime Kuma alert source by @xiaomizhou2 in #3312
- [refactor] refactor auto discovery http sd by @tomsun28 in #3300
- [refactor] set default encoding charset utf8 by @tomsun28 in #3315
- [feature] Support Zabbix alert source by @xiaomizhou2 in #3317
- update the license file, to add the plc4j-driver-s7 license by @boyucjz in #3318
- [bugfix] fix the calculator expr exist not work by @tomsun28 in #3314
- [feature]: integrate OpenTelemetry for GreptimeDB logs and traces- Rename hertzbeat-log to hertzbeat-otel by @zqr10159 in #3319
- [doc] japanese readme by @Calvin979 in #3329
- [Improve] Add i18 for ai bot by @MasamiYui in #3330
- [feature] Support Eureka Service Discovery by @pwallk in #3323
- [doc] japanese activemq by @Calvin979 in #3333
- [feat] add deep wiki badge by @Aias00 in #3334
- [doc] japanese airflow by @Calvin979 in #3339
- [feature] Support Consul Service Discovery by @pwallk in #3326
- [feat] Enhance Label Management for Monitors by @bigcyy in #3327
- [doc] japanese almalinux by @Calvin979 in #3343
- [feature] Support DNS Service Discovery by @MasamiYui in #3328
- [build] Update .gitignore and add Maven wrapper properties by @zhangshenghang in #3346
- [bugfix] Fix frontend error when all monitor metrics are selected in new bulletin form by @LL-LIN in #3345
- [release] update release version 1.7.1 by @zhangshenghang in #3347
## New Contributors
- @PengJingzhao made their first contribution in #3180
- @boyucjz made their first contribution in #3194
- @gagaradio made their first contribution in #3174
- @KevinLLF made their first contribution in #3248
- @markguo123 made their first contribution in #3294
## Apache Hertzbeat
**Repository URL:**
<https://github.com/apache/hertzbeat>
**Official Website:**
<https://hertzbeat.apache.org/>
**Apache Hertzbeat Download Link:**
<https://hertzbeat.apache.org/docs/download>
**Apache Hertzbeat Docker Images:**
Apache Hertzbeat provides Docker images for each release, available on Docker Hub:
- HertzBeat: <https://hub.docker.com/r/apache/hertzbeat>
- HertzBeat Collector: <https://hub.docker.com/r/apache/hertzbeat-collector>
**How to Contribute to the Apache Hertzbeat Open Source Community?**
<https://hertzbeat.apache.org/docs/community/contribution>
@@ -1,124 +0,0 @@
---
id: alert_notification_template
title: Notification Template
sidebar_label: Notification Template
keywords: [Template, Alert Template, Alarm Template, Notification Template, Message Notification, Alert Webhook Callback Notification]
---
> HertzBeat supports custom notification templates. Templates use placeholder variables for rendering, and the system automatically replaces variables with actual alert data during push notifications.
## Template Configuration
【Notification】->【Notice Template】->【Template Configuration】
![Template Configuration](/img/docs/help/alert-notification-template-1-en.png)
## Template Rendering
HertzBeat notification templates are based on FreeMarker syntax, supporting variable placeholders, conditional judgments, loops, formatting, and other advanced features. During template rendering, the system injects alert data objects (e.g., GroupAlert, SingleAlert) into the template, and variables are automatically replaced with actual values.
## Available Variables and Data Structures
### GroupAlert Structure Fields
[GroupAlert Definition](https://github.com/apache/hertzbeat/blob/master/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/alerter/GroupAlert.java)
- `id`Primary key of the alert group
- `groupKey` Unique identifier for the group
- `status`Group status (e.g., firing, resolved)
- `groupLabels`Group labels (Map)
- `commonLabels`Common labels (Map)
- `commonAnnotations`Common annotations (Map)
- `alertFingerprints`List of alert fingerprints
- `creator``modifier``gmtCreate``gmtUpdate`Metadata
- `alerts`List of alert details `List<SingleAlert>`
### SingleAlert Structure Fields
[SingleAlert Definition](https://github.com/apache/hertzbeat/blob/master/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/alerter/SingleAlert.java)
- `id`Primary key of the detail
- `fingerprint`Unique fingerprint
- `labels`Labels (Map)
- `annotations`Annotations (Map)
- `content`Alert content
- `status`Status (firing|resolved)
- `triggerTimes`Number of triggers
- `startAt``activeAt``endAt`Timestamps
- `creator``modifier``gmtCreate``gmtUpdate`Metadata
## Template Variables and Syntax Explanation
- **Global Variables**
- `${status}`Alert status (e.g., alert, recovery, etc.)
- `${groupKey}`Unique identifier for the group
- `${commonLabels.xxx}``${commonAnnotations.xxx}`Common labels and annotations, accessed via `xxx`
- **Alert Details List**
- `${alerts}`Collection of alert details, usually traversed with `<#list alerts as alert>`
- `${alert.labels.xxx}``${alert.annotations.xxx}`Labels and annotations for a single alert
- `${alert.content}`Alert content
- `${alert.triggerTimes}`Number of triggers
- `${alert.startAt}`First trigger time
- **Template Syntax Support**
- Supports FreeMarker syntax, including conditional statements `<#if>`, loops `<#list>`, JSON stringification `?json_string`, time formatting `?number_to_datetime`, string formatting `?string('yyyy-MM-dd HH:mm:ss')`, etc.
- Allows flexible combination of variables and template syntax to achieve complex message customization.
- For more syntax, refer to the [FreeMarker Documentation](https://freemarker.apache.org/)
## Template Example
```json
{
"title": "🔔 HertzBeat Alert Notification",
"status": "${status!"UNKNOWN"}",
"commonLabels": {
<#if commonLabels?? && commonLabels.severity??>
"severity": "${commonLabels.severity?switch("critical", "❤️ Critical", "warning", "💛 Warning", "info", "💚 Info", "Unknown")}"<#if commonLabels.alertname??>,</#if>
</#if>
<#if commonLabels?? && commonLabels.alertname??>
"alertName": "${commonLabels.alertname}"
</#if>
},
"alerts": [
<#if alerts?? && alerts?size gt 0>
<#list alerts as alert>
{
"index": ${alert?index + 1},
"labels": {
<#if alert.labels?? && alert.labels?size gt 0>
<#list alert.labels?keys as key>
"${key}": "${alert.labels[key]?json_string}"<#if key?has_next>,</#if>
</#list>
</#if>
},
<#if alert.content?? && alert.content != "">
"content": "${alert.content?json_string}",
</#if>
"triggerTimes": ${alert.triggerTimes!0},
"startAt": "${((alert.startAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}",
<#if alert.activeAt?? && alert.activeAt gt 0>
"activeAt": "${((alert.activeAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}",
</#if>
<#if alert.endAt?? && alert.endAt gt 0>
"endAt": "${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}"<#if alert.annotations?? && alert.annotations?size gt 0>,</#if>
</#if>
<#if alert.annotations?? && alert.annotations?size gt 0>
"annotations": {
<#list alert.annotations?keys as key>
"${key}": "${alert.annotations[key]?json_string}"<#if key?has_next>,</#if>
</#list>
}
</#if>
}<#if alert?has_next>,</#if>
</#list>
</#if>
],
"commonAnnotations": {
<#if commonAnnotations?? && commonAnnotations?size gt 0>
<#list commonAnnotations?keys as key>
"${key}": "${commonAnnotations[key]?json_string}"<#if key?has_next>,</#if>
</#list>
</#if>
}
}
@@ -1,124 +0,0 @@
---
id: alert_notification_template
title: 通知模板
sidebar_label: 通知模板
keywords: [模板, 告警模板, 通知模板,消息通知, 告警 Webhook 回调通知]
---
> HertzBeat 支持自定义通知模板,模板采用占位符变量进行渲染,系统会在推送时自动将变量替换为实际告警数据。
## 模板配置
【消息通知】->【通知模板】->【模板配置】
![模板管理](/img/docs/help/alert-notification-template-1.png)
## 模板渲染
HertzBeat 通知模板基于 FreeMarker 语法,支持变量占位符、条件判断、循环、格式化等高级用法。模板渲染时,系统会将告警数据对象(如 GroupAlert、SingleAlert)注入模板,变量会被自动替换为实际值。
## 可用变量与数据结构
### GroupAlert 结构体字段
[GroupAlert定义](https://github.com/apache/hertzbeat/blob/master/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/alerter/GroupAlert.java)
- `id`:告警分组主键
- `groupKey`:分组唯一标识
- `status`:分组状态(如 firing、resolved
- `groupLabels`:分组标签(Map
- `commonLabels`:公共标签(Map
- `commonAnnotations`:公共注解(Map
- `alertFingerprints`:告警指纹列表
- `creator``modifier``gmtCreate``gmtUpdate`:元数据
- `alerts`:告警明细列表(`List<SingleAlert>`
### SingleAlert 结构体字段
[SingleAlert定义](https://github.com/apache/hertzbeat/blob/master/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/alerter/SingleAlert.java)
- `id`:明细主键
- `fingerprint`:唯一指纹
- `labels`:标签(Map
- `annotations`:注解(Map
- `content`:告警内容
- `status`:状态(firing|resolved
- `triggerTimes`:触发次数
- `startAt``activeAt``endAt`:时间戳
- `creator``modifier``gmtCreate``gmtUpdate`:元数据
## 模板变量与语法说明
- **全局变量**
- `${status}`:告警状态(如告警、恢复等)
- `${groupKey}`:分组唯一标识
- `${commonLabels.xxx}``${commonAnnotations.xxx}`:公共标签和注解,可通过 `xxx` 访问具体字段
- **告警明细列表**
- `${alerts}`:告警明细集合,通常配合 `<#list alerts as alert>` 进行遍历
- `${alert.labels.xxx}``${alert.annotations.xxx}`:单条告警的标签和注解
- `${alert.content}`:告警内容
- `${alert.triggerTimes}`:触发次数
- `${alert.startAt}`:首次触发时间
- **模板语法支持**
- 支持 FreeMarker 语法,包括条件判断 `<#if>`、循环 `<#list>`、JSON 字符串化 `?json_string`、时间格式化 `?number_to_datetime`、字符串格式化 `?string('yyyy-MM-dd HH:mm:ss')`
- 可灵活组合变量与模板语法,实现复杂的消息定制
- 更多语法请参考 [FreeMarker 官方文档](https://freemarker.apache.org/)
## 模板示例
```json
{
"title": "🔔 HertzBeat Alert Notification",
"status": "${status!"UNKNOWN"}",
"commonLabels": {
<#if commonLabels?? && commonLabels.severity??>
"severity": "${commonLabels.severity?switch("critical", "❤️ Critical", "warning", "💛 Warning", "info", "💚 Info", "Unknown")}"<#if commonLabels.alertname??>,</#if>
</#if>
<#if commonLabels?? && commonLabels.alertname??>
"alertName": "${commonLabels.alertname}"
</#if>
},
"alerts": [
<#if alerts?? && alerts?size gt 0>
<#list alerts as alert>
{
"index": ${alert?index + 1},
"labels": {
<#if alert.labels?? && alert.labels?size gt 0>
<#list alert.labels?keys as key>
"${key}": "${alert.labels[key]?json_string}"<#if key?has_next>,</#if>
</#list>
</#if>
},
<#if alert.content?? && alert.content != "">
"content": "${alert.content?json_string}",
</#if>
"triggerTimes": ${alert.triggerTimes!0},
"startAt": "${((alert.startAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}",
<#if alert.activeAt?? && alert.activeAt gt 0>
"activeAt": "${((alert.activeAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}",
</#if>
<#if alert.endAt?? && alert.endAt gt 0>
"endAt": "${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}"<#if alert.annotations?? && alert.annotations?size gt 0>,</#if>
</#if>
<#if alert.annotations?? && alert.annotations?size gt 0>
"annotations": {
<#list alert.annotations?keys as key>
"${key}": "${alert.annotations[key]?json_string}"<#if key?has_next>,</#if>
</#list>
}
</#if>
}<#if alert?has_next>,</#if>
</#list>
</#if>
],
"commonAnnotations": {
<#if commonAnnotations?? && commonAnnotations?size gt 0>
<#list commonAnnotations?keys as key>
"${key}": "${commonAnnotations[key]?json_string}"<#if key?has_next>,</#if>
</#list>
</#if>
}
}
+1 -2
View File
@@ -101,8 +101,7 @@
"help/alert_feishu",
"help/alert_console",
"help/alert_enterprise_wechat_app",
"help/alert_smn",
"help/alert_notification_template"
"help/alert_smn"
]
},
{
Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 KiB

+2 -7
View File
@@ -524,9 +524,7 @@
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<argLine>
${argLine} --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED
</argLine>
<argLine>--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED</argLine>
</configuration>
</plugin>
<!-- java code style check -->
@@ -559,16 +557,13 @@
<version>${jacoco-maven-plugin.version}</version>
<executions>
<execution>
<id>prepare-agent</id>
<phase>initialize</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
+1 -16
View File
@@ -16,7 +16,7 @@
# under the License.
name: setup-deps
description: Install host system dependencies (with mvnd)
description: Install host system dependencies
runs:
using: composite
@@ -26,18 +26,3 @@ runs:
with:
distribution: "zulu"
java-version: 17
- name: Install mvnd
shell: bash
run: |
MVND_VERSION=1.0.2
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
- name: Verify mvnd installation
shell: bash
run: mvnd --version
@@ -92,11 +92,6 @@ export class AlertIntegrationComponent implements OnInit {
id: 'huaweicloud-ces',
name: this.i18nSvc.fanyi('alert.integration.source.huaweicloud-ces'),
icon: 'assets/img/integration/huaweicloud.svg'
},
{
id: 'volcengine',
name: this.i18nSvc.fanyi('alert.integration.source.volcengine'),
icon: 'assets/img/integration/volcengine.svg'
}
];
@@ -137,13 +137,7 @@
<div class="monitor-list-header">
<div class="monitor-header-actions">
<label nz-checkbox [(ngModel)]="checkedAll" (ngModelChange)="onAllChecked($event)"></label>
<nz-pagination
[(nzPageIndex)]="pageIndex"
[nzPageSize]="pageSize"
[nzTotal]="total"
(nzPageIndexChange)="onPageIndexChange($event)"
nzSimple
></nz-pagination>
<nz-pagination [(nzPageIndex)]="pageIndex" [nzTotal]="total" (nzPageIndexChange)="onPageIndexChange($event)" nzSimple></nz-pagination>
</div>
</div>
@@ -1,39 +0,0 @@
> Send Volcano Engine Cloud Monitor alerts to the HertzBeat alert platform via Webhook.
### Configure Volcano Engine Alert Callback
1. Log in to the Volcano Engine Cloud Monitor [Callback Address Management page](https://console.volcengine.com/cloud-monitor/notice/webhook)
2. Click **Create Callback Address**
3. On the creation page:
- Select `General Address Callback` as the Callback Type
- Enter HertzBeat's Webhook URL in the Callback Address field:
```
http://{your_system_host}/api/alerts/report/volcengine
```
### Bind Alert Policy
1. Log in to the Volcano Engine Cloud Monitor [Alert Policy Configuration page](https://console.volcengine.com/cloud-monitor/alert/strategy)
2. Create a new policy or edit an existing one. In the notification settings:
- Set Notification Method to **Manual Notification**
- Check **Alert Callback** under Notification Channel
- Select the callback address created earlier
3. Save the alert policy
### Common Issues
#### No Alerts Received
- Ensure the Webhook URL is publicly accessible
- Check server logs for incoming requests
- Test Webhook connectivity via the Callback Address page
#### Alerts Not Triggering
- Verify policy conditions and correct callback address binding
- Confirm the alert policy is **Enabled**
- Check Alert History in Volcano Engine console for trigger events
For more details, refer to the [Volcano Engine Alert Configuration Documentation](https://www.volcengine.com/docs/6408/68122)
@@ -1,35 +0,0 @@
> Volcano Engine Cloudの監視のアラームをWebhookを介してHertzbeatアラートプラットフォームに送信します。
### Volcanoエンジンアラームコールバックを構成します
1. 火山エンジンクラウドの監視にログイン[コールバックアドレス管理ページ](https://console.volcengine.com/cloud-monitor/notice/webhook)
2. **をクリックしてコールバックアドレスを作成します**
3. コールバックアドレス作成ページの基本情報を入力し、コールバックタイプで「汎用アドレスコールバック」を選択します。
4. コールバックアドレス入力ボックスに入力して、HertzBeatが提供するWebHookインターフェイスURLに入ります。
```
http// {your_system_host}/api/alerts/report/volcengine
```
### バインドアラームポリシー
1. 火山エンジンクラウドの監視にログイン[アラームポリシーの構成ページ](https://console.volcengine.com/cloud-monitor/alert/strategy)
2. 新しいポリシーを作成するか、アラームモードの構成で既存のポリシーを編集します
- 通知方法を**手動通知**として選択します
- アラームチャネルを確認**アラームコールバック**
- アラームコールバックで作成されたコールバックアドレスを選択します
3. アラームポリシーを保存します
### よくある質問
#### は受け取っていません
- パブリックネットワークによってWebHook URLにアクセスできることを確認してください
- サーバーログにリクエストレコードがあるかどうかを確認します
- Webhookが火山エンジンコールバックアドレスページで利用可能であるかどうかをテストします
#### アラームはトリガーされていません
- アラームポリシーが正しい状態にあり、正しいコールバックアドレスが通知チャネルとしてバインドされていることを確認してください
- アラームポリシーが「有効」状態であることを確認してください
- 火山エンジンクラウド監視コンソールのアラーム履歴を表示して、ポリシーがトリガーされていることを確認する
詳細については、[Volcengine Alarm Configuration Document](https://www.volcengine.com/docs/6408/68122を参照してください)
@@ -1,42 +0,0 @@
> Envie os alertas do Volcano Engine Cloud Monitoring para a plataforma de alertas da HertzBeat via Webhook.
### Configurar o retorno de chamada de alarme do Volcano Engine
1. Acesse o Volcano Engine Cloud Monitoring [Página de Gerenciamento de Endereços de Retorno de Chamada](https://console.volcengine.com/cloud-monitor/notice/webhook)
2. Clique em **Criar endereço de retorno de chamada**
3. Preencha as informações básicas na página de criação de endereço de retorno de chamada e selecione `Retorno de chamada de endereço geral` para o tipo de retorno.
4. Preencha a URL do endereço da interface do Webhook fornecida pela HertzBeat na caixa de entrada de endereço de retorno de chamada:
```
http://{host_do_seu_sistema}/api/alerts/report/volcengine
```
### Vincular estratégia de alarme
1. Acesse o Volcano Engine Cloud Monitoring [Página de Configuração da Estratégia de Alarme](https://console.volcengine.com/cloud-monitor/alert/strategy)
2. Crie uma nova estratégia ou edite uma existente na configuração do método de alarme.
- Selecione o método de notificação como **Manual notificação**
- Verifique o **Retorno de chamada de alarme** para o canal de alarme
- Selecione o endereço de retorno de chamada criado na etapa anterior no retorno de chamada de alarme
3. Salvar política de alarme
### Perguntas frequentes
#### Alarme não recebido
- Certifique-se de que a URL do Webhook esteja acessível à rede pública
- Verifique o log do servidor para registros de solicitações
- Teste se o Webhook está disponível na página de endereço de retorno de chamada do Volcano Engine
#### Alarme não disparado
- Certifique-se de que as condições da política de alarme estejam corretas e vincule o endereço de retorno de chamada correto como canal de notificação
- Certifique-se de que a política de alarme esteja no estado `habilitado`
- Verifique o histórico de alarmes no Console de Monitoramento em Nuvem do Volcano Engine para garantir que a política seja disparada
Para obter mais informações, consulte o [Documento de Configuração de Alarme do Volcano Engine](https://www.volcengine.com/docs/6408/68122)
@@ -1,35 +0,0 @@
> 将火山引擎云监控的告警通过 Webhook 方式发送到 HertzBeat 告警平台。
### 配置火山引擎告警回调
1. 登录火山引擎云监控[回调地址管理页面](https://console.volcengine.com/cloud-monitor/notice/webhook)
2. 点击**创建回调地址**
3. 在回调地址创建页面填写基础信息,回调类型选择`通用地址回调`
4. 回调地址输入框中填写 HertzBeat 提供的 Webhook 接口地址 URL:
```
http://{your_system_host}/api/alerts/report/volcengine
```
### 绑定告警策略
1. 登录火山引擎云监控[告警策略配置页面](https://console.volcengine.com/cloud-monitor/alert/strategy)
2. 创建新策略或编辑已有策略,在告警方式配置中
- 选择通知方式为**手动通知**
- 告警渠道勾选**告警回调**
- 告警回调中选择上一步创建的回调地址
3. 保存告警策略
yar
### 常见问题
#### 未收到告警
- 确保 Webhook URL 可以被公网访问
- 检查服务器日志是否有请求记录
- 在火山引擎回调地址页面测试 Webhook 是否可用
#### 告警未触发
- 确保告警策略的条件正确,并且绑定正确的回调地址作为通知渠道
- 确保告警策略为`启用`状态
- 在火山引擎云监控控制台中查看告警历史,确保策略被触发
更多信息请参考 [火山引擎告警配置文档](https://www.volcengine.com/docs/6408/68122)
@@ -1,35 +0,0 @@
> 將火山引擎雲監控的告警通過 Webhook 方式發送到 HertzBeat 告警平台。
### 配置火山引擎告警回調
1. 登錄火山引擎雲監控[回調地址管理頁面](https://console.volcengine.com/cloud-monitor/notice/webhook)
2. 點擊**創建回調地址**
3. 在回調地址創建頁面填寫基礎信息,回調類型選擇`通用地址回調`
4. 回調地址輸入框中填寫 HertzBeat 提供的 Webhook 接口地址 URL:
```
http://{your_system_host}/api/alerts/report/volcengine
```
### 綁定告警策略
1. 登錄火山引擎雲監控[告警策略配置頁面](https://console.volcengine.com/cloud-monitor/alert/strategy)
2. 創建新策略或編輯已有策略,在告警方式配置中
- 選擇通知方式為**手動通知**
- 告警渠道勾選**告警回調**
- 告警回調中選擇上一步創建的回調地址
3. 保存告警策略
### 常見問題
#### 未收到告警
- 確保 Webhook URL 可以被公網訪問
- 檢查服務器日誌是否有請求記錄
- 在火山引擎回調地址頁面測試 Webhook 是否可用
#### 告警未觸發
- 確保告警策略的條件正確,並且綁定正確的回調地址作為通知渠道
- 確保告警策略為`啟用`狀態
- 在火山引擎雲監控控制台中查看告警歷史,確保策略被觸發
更多信息請參考 [火山引擎告警配置文檔](https://www.volcengine.com/docs/6408/68122)
@@ -1,21 +1,15 @@
HertzBeat 提供 API 接口,外部系统可以通过 Webhook 方式调用此接口将告警数据推送到 HertzBeat 告警平台。
> HertzBeat 对外提供 api 接口,外部系统可以通过 Webhook 方式调用此接口将告警数据推送到 HertzBeat 告警平台。
## 接口端点
### 接口端点
`POST /api/alerts/report`
### 请求头
- `Content-Type`: `application/json`
- `Authorization`: `Bearer {token}`
## 请求
* `Content-Type`: `application/json`
* `Authorization`: `Bearer {token}`
## 请求体
### 请求
```json
{
@@ -36,32 +30,30 @@ HertzBeat 提供 API 接口,外部系统可以通过 Webhook 方式调用此
}
```
### 字段
字段
* `labels`: 告警标签
* `alertname`: 告警规则名称
* `priority`: 告警级别 (`warning`, `critical`)
* `instance`: 告警
* `annotations`: 告警注释信息
* `summary`: 告警摘要
* `description`: 告警详细描述
* `content`: 告警
* `status`: 告警状态 (`firing`, `resolved`)
* `triggerTimes`: 告警触发次数
* `startAt`: 告警开始时间
* `activeAt`: 告警激活时间
* `endAt`: 告警结束时间
- `labels`: 告警標籤
- `alertname`: 告警規則名稱
- `priority`: 告警級別 (warning, critical)
- `instance`: 告警
- `annotations`: 告警註釋信息
- `summary`: 告警摘要
- `description`: 告警詳細描述
- `content`: 告警
- `status`: 告警狀態 (firing, resolved)
- `triggerTimes`: 告警觸發次數
- `startAt`: 告警開始時間
- `activeAt`: 告警激活時間
- `endAt`: 告警結束時間
### 配置验证
## 配置验证
* 第三方系统触发告警后,通过 Webhook 回调 HertzBeat 的 `/api/alerts/report` 接口,将告警数据推送到 HertzBeat 告警平台。
* 在 HertzBeat 告警平台中处理并查看告警数据,验证告警数据是否正确。
- 第三方系统触发告警后通过 webhook 回调 HertzBeat 的 `/api/alerts/report` 接口,将告警数据推送到 HertzBeat 告警平台。
- 在 HertzBeat 告警平台中对告警数据处理查看,验证告警数据是否正确。
## 数据流转
### 数据流转:
```mermaid
graph LR
@@ -75,8 +67,7 @@ graph LR
```
### 常见问题
## 常见问题
* 确保 HertzBeat URL 可以被第三方系统服务器访问。
* 检查第三方系统日志中是否有告警发送成功或失败的消息。
- 确保 HertzBeat URL 可以被第三方系统服务器访问。
- 检查第三方系统日志中是否有告警发送成功失败的消息。
-1
View File
@@ -102,7 +102,6 @@
"alert.integration.source.zabbix": "Zabbix",
"alert.integration.source.alibabacloud-sls": "AlibabaCloud-SLS",
"alert.integration.source.huaweicloud-ces": "Huawei Cloud Eye",
"alert.integration.source.volcengine": "Volcengine Monitoring",
"alert.integration.token.desc": "Token you generated that can be used to access the HertzBeat API.",
"alert.integration.token.new": "Click to Generate Token",
"alert.integration.token.notice": "Token only be displayed once. Please keep your token secure. Do not share it with others.",
-1
View File
@@ -102,7 +102,6 @@
"alert.integration.source.zabbix": "Zabbix",
"alert.integration.source.alibabacloud-sls": "AlibabaCloud-SLS",
"alert.integration.source.huaweicloud-ces": "Huawei Cloud Eye",
"alert.integration.source.volcengine":"火山エンジン監視",
"alert.integration.token.desc": "HertzBeat APIにアクセスするために生成したトークン。",
"alert.integration.token.new": "トークンを生成するにはクリック",
"alert.integration.token.notice": "トークンは一度だけ表示されます。トークンを安全に保管し、他人と共有しないでください。",
+628 -273
View File
@@ -73,6 +73,303 @@
"intervals": "Intervalos",
"intervals.tip": "Intervalo de tempo para coleta periódica de dados, em segundos",
"question.link": "https://hertzbeat.apache.org/docs/help/issue/",
"alert.setting.name": "Nome do limite",
"alert.setting.type": "Tipo de limite",
"alert.setting.name.tip": "O nome da regra de limite precisa ser exclusivo",
"alert.setting.new.periodic": "Adicionar novo limite do plano",
"alert.setting.new.realtime": "Adicionado limite em tempo real",
"alert.setting.period": "Ciclo de execução",
"alert.setting.period.placeholder": "Insira o período de execução, mínimo de 60 segundos",
"alert.setting.new": "Nova Regra de Limite",
"alert.setting.edit": "Editar Regra de Limite",
"alert.setting.edit.periodic": "Editar limiar do plano",
"alert.setting.edit.realtime": "Editar limites em tempo real",
"alert.setting.delete": "Excluir Regra de Limite",
"alert.setting.export": "Exportar Regra",
"alert.setting.import": "Importar Regra",
"alert.setting.target": "Métrica Alvo",
"alert.setting.target.place-holder": "Pesquise ou selecione a métrica alvo",
"alert.setting.expr": "Expressão de Disparo do Limite",
"alert.setting.trigger": "Disparar alarmes e atualizar o status do monitor",
"alert.setting.rule": "Regra de Limite",
"alert.setting.number": "Numérico",
"alert.setting.string": "Texto",
"alert.setting.time": "Tempo",
"alert.setting.bind.available": "Monitoramento opcional",
"alert.setting.bind.manage": "Monitoramento relacionado",
"alert.setting.bind.monitors": "Monitoramento relacionado",
"alert.setting.bind.monitors.tip": "Configure essa regra de limiar para aplicar à tarefa de monitoramento especificada, e o padrão é que todos os aplicativos não estão associados.",
"alert.setting.bind.need-save": "Selecione primeiro o tipo de indicador e depois realize a associação de monitoramento.",
"alert.setting.bind.selected": "Monitoramento selecionado",
"alert.setting.rule.label": "Configuração gráfica de regras de limite de alarme, suporta múltiplas regras &&",
"alert.setting.rule.metric.place-holder": "Selecione a métrica",
"alert.setting.rule.switch-expr.0": "Limite de Modelo",
"alert.setting.rule.switch-expr.1": "Limite de Codificação",
"alert.setting.rule.operator": "Operador",
"alert.setting.rule.operator.str-equals": "igual",
"alert.setting.rule.operator.str-no-equals": "não igual",
"alert.setting.rule.operator.str-contains": "contém",
"alert.setting.rule.operator.str-no-contains": "não contém",
"alert.setting.rule.operator.str-matches": "corresponde",
"alert.setting.rule.operator.str-no-matches": "não corresponde",
"alert.setting.rule.operator.exists": "valor existe",
"alert.setting.rule.operator.no-exists": "valor não existe",
"alert.setting.rule.string-value.place-holder": "Digite o texto",
"alert.setting.rule.numeric-value.place-holder": "Digite o número",
"alert.setting.times": "Número de Disparos",
"alert.setting.times.tip": "Defina quantas vezes o limite deve ser disparado antes de enviar um alerta",
"alert.setting.template": "Modelo de Notificação",
"alert.setting.template.tip": "Variáveis de ambiente de modelo de notificação suportadas",
"alert.setting.template.label": "O modelo de informação de notificação enviado após o disparo do alarme, veja as variáveis de ambiente do modelo acima",
"alert.setting.template.example": "Digite o modelo de notificação. Ex: ${app}.${metrics}.${metric} valor está muito alto",
"alert.setting.template.monitor-type": "Nome do Tipo de Monitor",
"alert.setting.template.metrics-name": "Nome da Métrica",
"alert.setting.template.metric-name": "Nome da Métrica",
"alert.setting.template.metric-value": "Valor da Métrica",
"alert.setting.template.other-value": "Outro Valor da Métrica",
"alert.setting.template.vars.app": "Tipo de aplicativo",
"alert.setting.template.vars.instance": "ID da instância",
"alert.setting.template.vars.instance-name": "Nome da instância",
"alert.setting.template.vars.instance-host": "Exemplo de host",
"alert.setting.template.vars.metrics": "Nome métrico",
"alert.setting.template.vars.threshold": "expressão limite",
"alert.setting.template.vars.time": "Tempo de gatilho",
"alert.setting.template.vars.tip": "Inserir indicador ou operador",
"alert.setting.template.vars.value": "Valor de gatilho",
"alert.setting.default": "Padrão Global",
"alert.setting.default.tip": "Se esta configuração de limite de alarme se aplica a todos os monitoramentos deste tipo globalmente",
"alert.setting.enable": "Habilitar Limite",
"alert.setting.enable.tip": "Esta configuração de limite de alarme está habilitada ou desabilitada",
"alert.setting.recover-notice": "Notificação de Recuperação",
"alert.setting.recover-notice.tip": "Se deve enviar a notificação correspondente quando o alarme for resolvido sob esta regra de limite",
"alert.setting.connect": "Associar Monitores ao Limite de Alarme",
"alert.setting.connect.left": "Não Associado",
"alert.setting.connect.right": "Associado",
"alert.setting.expr.tip": "Variáveis de ambiente e operadores suportados na expressão de disparo do limite",
"alert.setting.expr.label": "Calcule e julgue se o limite foi disparado de acordo com esta expressão. As variáveis de ambiente e operadores da expressão são mostrados acima.",
"alert.setting.expr.example": "Calcule se o limite foi disparado de acordo com esta expressão. Ex",
"alert.setting.priority.tip": "O nível de alarme que dispara o limite, do baixo para o alto: Aviso, Crítico, Emergência",
"alert.setting.target.tip": "O objeto métrico selecionado",
"alert.setting.target.other": "Outros objetos métricos da linha",
"alert.setting.target.system_value_row_count": "Contagem de linhas de valor do Sistema-Métricas",
"alert.setting.operator": "Funções de operador suportadas",
"alert.setting.search": "Pesquisar Limite",
"alert.severity": "Nível de alarme",
"alert.severity.0": "Alarme de emergência",
"alert.severity.1": "Alarme sério",
"alert.severity.2": "Alerta de aviso",
"alert.severity.all": "Todos",
"alert.silence.new": "Nova Estratégia de Silêncio",
"alert.silence.edit": "Editar Estratégia de Silêncio",
"alert.silence.delete": "Excluir Estratégia de Silêncio",
"alert.silence.name": "Nome da Estratégia de Silêncio",
"alert.silence.match-all": "Corresponder a Todos",
"alert.silence.priority": "Corresponder Prioridade",
"alert.silence.type.once": "Silêncio Único",
"alert.silence.type.cyc": "Silêncio Periódico",
"alert.silence.type": "Tipo de Silêncio",
"alert.silence.tags": "Corresponder Tags",
"alert.silence.time": "Período de Silêncio",
"alert.silence.times": "Número de Alertas Silenciados",
"alert.silence.enable": "Habilitar Silêncio",
"alert.status": "Estado do alarme",
"alert.status.all": "Todos os status",
"alert.status.firing": "Alarmante",
"alert.status.resolved": "Restaurado",
"alert.converge.new": "Nova Estratégia de Convergência",
"alert.converge.edit": "Editar Estratégia de Convergência",
"alert.converge.delete": "Excluir Estratégia de Convergência",
"alert.converge.name": "Nome da Estratégia",
"alert.converge.match-all": "Corresponder a Todos",
"alert.converge.priority": "Corresponder Prioridade",
"alert.converge.tags": "Corresponder Tags",
"alert.converge.repeat": "Critério de Repetição de Alerta",
"alert.converge.repeat-rule": "As tags e a prioridade do alerta são as mesmas",
"alert.converge.eval-interval": "Intervalo de Convergência de Repetição de Alerta (s)",
"alert.converge.enable": "Habilitar Convergência",
"alert.center.delete": "Excluir Alertas",
"alert.center.clear": "Limpar Tudo",
"alert.center.deal": "Marcar como Processado",
"alert.center.no-deal": "Marcar como Pendente",
"alert.center.search": "Pesquisar Conteúdo do Alerta",
"alert.center.filter-status": "Status do Alerta",
"alert.center.filter-priority": "Prioridade do Alerta",
"alert.center.target": "Métrica Alvo",
"alert.center.monitor": "Monitor Pertence",
"alert.center.priority": "Prioridade",
"alert.center.content": "Conteúdo do Alerta",
"alert.center.tags": "Tags",
"alert.center.status": "Status",
"alert.center.time": "Hora do Alerta",
"alert.center.time.tip": "Alertas foram disparados {{times}} vezes durante este período de alerta",
"alert.center.first-time": "Hora de Início",
"alert.center.last-time": "Última Hora",
"alert.center.confirm.delete": "Confirme se deseja excluir!",
"alert.center.confirm.clear-all": "Confirme se deseja limpar todos os alertas!",
"alert.center.notify.no-mark": "Nenhum item selecionado para marcação!",
"alert.center.confirm.mark-done-batch": "Confirme se deseja marcar como processado em lote!",
"alert.center.confirm.mark-done": "Confirme se deseja marcar como processado!",
"alert.center.confirm.mark-no-batch": "Confirme se deseja marcar como pendente em lote!",
"alert.center.confirm.mark-no": "Confirme se deseja marcar como pendente!",
"alert.help.notice": "A notificação é usada para configurar o destinatário da mensagem de alarme e o método de recebimento. A mensagem de alarme será enviada ao destinatário de forma especificada (suporta email, discord, webhook, etc). <a href='https://hertzbeat.apache.org/zh-cn/docs/help/alert_webhook'>Clique aqui para ver os passos de configuração.</a>.<br>“<i>Modelo de Notificação</i>” é o modelo de estrutura de conteúdo da mensagem. O modelo embutido é usado por padrão ou você pode personalizar o modelo para personalizar a estrutura de notificação da mensagem.<br><span class='help_module_span'>Nota⚠\uFE0F: Após configurar o “<i>Destinatário</i>”, você também precisa configurar a “<i>Política de Notificação</i>” para especificar quais mensagens são enviadas para quais destinatários.</span><a href='https://hertzbeat.apache.org/docs/help/alert_email'> Clique aqui para ver possíveis problemas</a>.",
"alert.help.notice.link": "https://hertzbeat.apache.org/docs/help/alert_email",
"alert.help.converge": "A Convergência de Alarmes suporta a deduplicação e convergência de mensagens de alarme repetidas dentro de um período de tempo especificado. <br> Clique em \"<i>Nova Estratégia de Convergência</i>\" e configure o período de tempo para evitar um grande número de alarmes repetitivos que podem anestesiar o destinatário do alarme.",
"alert.help.converge.link": "https://hertzbeat.apache.org",
"alert.help.center": "O Centro de Alarmes é o centro de processamento de notificações para todas as mensagens de alarme disparadas, incluindo alarmes disparados por limites internos do sistema e informações de alarme acessadas através de canais de alarme externos de terceiros. <br> O Hertzbeat suporta operações em lote, como consulta de alarmes, marcação de processamento, não processados, exclusão de alarmes e limpeza.",
"alert.help.center.link": "https://hertzbeat.apache.org/docs/help/guide",
"alert.help.setting": "As Regras de Limite são usadas para o gerenciamento de regras de limite de alarme para métricas. Clique em \"<i>Novo Limite</i>\" para configurar o limite de alarme para métricas de monitoramento. O Hertzbeat disparará alarmes com base no limite e nos dados das métricas.<br>Nota⚠\uFE0F: A mensagem de alarme que foi disparada pode ser verificada no [Centro de Alarmes], e você também pode configurar o método de notificação e os destinatários em [Notificação].",
"alert.help.setting.link": "https://hertzbeat.apache.org/docs/help/alert_threshold",
"alert.help.silence": "O gerenciamento de Silêncio de Alarmes é usado quando você não quer ser perturbado durante a manutenção do sistema ou nos fins de semana. <br> Clique em \"<i>Nova Estratégia de Silêncio</i>\" e configure o período de tempo para bloquear mensagens para que você não seja perturbado durante os intervalos.",
"alert.help.silence.link": "https://hertzbeat.apache.org/docs",
"alert.help.group": "O agrupamento de convergência suporta combinar alarmes para rótulos de agrupamento especificados, desduplicação e convergência dos mesmos alarmes repetidos para o período. Você pode clicar em \"<i> Adicionar política de agrupamento </i>\" e configurá -la. <br> Quando a regra do limiar aciona o relatório de alarme ou alarme externo, ele entrará na convergência do pacote para conduzir o agrupamento de alarme e o alarme é desduplicado para evitar um grande número de mensagens de alarme causando tempestades de alarme.",
"alert.help.group.link": "https://hertzbeat.apache.org/docs/#%E5%91%8A%E8%AD%A6%E6%94%B6%E6%95%9B",
"alert.inhibit.delete": "Excluir regras de supressão",
"alert.inhibit.edit": "Editar regras de supressão",
"alert.inhibit.enable.tip": "Se deve ativar esta regra de supressão",
"alert.inhibit.equal_labels": "Tags iguais",
"alert.inhibit.equal_labels.common": "Tags comuns",
"alert.inhibit.equal_labels.custom": "Tags personalizadas",
"alert.inhibit.equal_labels.more": "Existem também {{count}} tags",
"alert.inhibit.equal_labels.placeholder": "Digite o nome da tag e pressione Enter ou selecione na lista suspensa",
"alert.inhibit.equal_labels.tip": "As chaves de tag e os valores correspondentes dos alarmes de origem e dos alarmes de destino devem ser iguais. As chaves de tag comuns incluem alertname, instância, gravidade, etc.",
"alert.inhibit.name": "Suprimir nome da regra",
"alert.inhibit.name.tip": "Um nome que identifique esta regra de supressão precisa ser exclusivo",
"alert.inhibit.new": "Adicionado regras de supressão",
"alert.inhibit.source_labels": "etiqueta de origem",
"alert.inhibit.source_labels.tip": "Quando um alarme contém essas tags, o alarme alvo será suprimido",
"alert.inhibit.target_labels": "Tags de destino",
"alert.inhibit.target_labels.tip": "Alarmes que correspondem a essas tags serão suprimidos",
"alert.integration.source": "Fonte de alarme integrada",
"alert.integration.source.alertmanager": "Alertmanager",
"alert.integration.source.prometheus": "Prometheus",
"alert.integration.source.skywalking": "SkyWalking",
"alert.integration.source.tencent": "Monitoramento de nuvem Tencent",
"alert.integration.source.webhook": "PadrãoWebhook",
"alert.integration.source.alibabacloud-sls": "AlibabaCloud-SLS",
"alert.integration.source.huaweicloud-ces": "Huawei Cloud Eye",
"alert.integration.token.desc": "O token gerado pode ser usado para acessar a API HertzBeat",
"alert.integration.token.new": "Clique para gerar token",
"alert.integration.token.notice": "Este conteúdo será exibido apenas uma vez, por favor guarde seu token adequadamente e não o divulgue a terceiros.",
"alert.integration.token.title": "Token de autenticação de acesso",
"alert.notice.template": "Modelo de Notificação",
"alert.notice.template.new": "Novo Modelo",
"alert.notice.template.edit": "Editar Modelo",
"alert.notice.template.show": "Ver Conteúdo do Modelo",
"alert.notice.template.delete": "Excluir Modelo",
"alert.notice.template.name": "Nome do Modelo",
"alert.notice.template.type": "Tipo de Notificação",
"alert.notice.template.preset": "Tipo de Modelo",
"alert.notice.template.preset.true": "Pré-definido pelo Sistema",
"alert.notice.template.preset.false": "Personalizado pelo Usuário",
"alert.notice.template.content": "Conteúdo do Modelo",
"alert.notice.template.placeholder": "Selecione um modelo",
"alert.notice.receiver": "Destinatário da Notificação",
"alert.notice.receiver.new": "Novo Destinatário",
"alert.notice.receiver.edit": "Editar Destinatário",
"alert.notice.receiver.delete": "Excluir Destinatário",
"alert.notice.receiver.people": "Destinatário",
"alert.notice.receiver.people.placeholder": "Selecione um destinatário",
"alert.notice.receiver.people.name": "Nome do Destinatário",
"alert.notice.receiver.type": "Tipo de Notificação",
"alert.notice.receiver.type.placeholder": "Selecione um tipo de notificação",
"alert.notice.receiver.setting": "Configuração",
"alert.notice.receiver.next": "Por favor, configure sua [Política de Notificação de Alerta] no próximo passo",
"alert.notice.type.sms": "SMS",
"alert.notice.type.phone": "Telefone",
"alert.notice.type.email": "Email",
"alert.notice.type.userId": "ID do Usuário",
"alert.notice.type.url": "URL",
"alert.notice.type.wechat": "Abrir WeChat",
"alert.notice.type.wechat-id": "WeChat OPENID",
"alert.notice.type.WeCom-robot": "Robô WeCom",
"alert.notice.type.WeCom-robot-key": "Chave do Robô WeCom",
"alert.notice.type.access-token": "Token de Acesso do Robô",
"alert.notice.type.ding": "Robô DingDing",
"alert.notice.type.fei-shu": "Robô FeiShu",
"alert.notice.type.fei-shu-key": "Chave do Robô FeiShu",
"alert.notice.type.telegram-bot": "Bot do Telegram",
"alert.notice.type.telegram-bot-token": "Token do Bot do Telegram",
"alert.notice.type.telegram-bot-user-id": "ID do Usuário do Telegram",
"alert.notice.type.telegram-message-thread-id": "ID da Thread do Telegram",
"alert.notice.type.slack": "WebHook do Slack",
"alert.notice.type.slack-webHook-url": "URL do WebHook do Slack",
"alert.notice.type.discord": "Bot do Discord",
"alert.notice.type.discord-bot-token": "Token do Bot do Discord",
"alert.notice.type.discord-channel-id": "ID do Canal do Discord",
"alert.notice.type.WeComApp": "App WeCom",
"alert.notice.type.WeComApp-corpId": "ID da Corporação do App WeCom",
"alert.notice.type.WeComApp-agentId": "ID do App WeCom",
"alert.notice.type.WeComApp-appSecret": "Segredo do App WeCom",
"alert.notice.type.WeComApp-userId": "ID do Usuário (separado por |)",
"alert.notice.type.WeComApp-partyId": "ID do Partido (separado por |)",
"alert.notice.type.WeComApp-tagId": "ID da Tag (separado por |)",
"alert.notice.type.smn": "SMN da Nuvem Huawei",
"alert.notice.type.smn-ak": "AK",
"alert.notice.type.smn-sk": "SK",
"alert.notice.type.smn-projectId": "ID do Projeto",
"alert.notice.type.smn-region": "Região",
"alert.notice.type.smn-topicUrn": "TopicUrn",
"alert.notice.type.serverchan": "ServerChan",
"alert.notice.type.serverchan-token": "Token do ServerChan",
"alert.notice.type.gotify": "Gotify",
"alert.notice.type.gotify-token": "Token do Gotify",
"alert.notice.rule": "Política de Notificação",
"alert.notice.rule.new": "Nova Política de Notificação",
"alert.notice.rule.edit": "Editar Política de Notificação",
"alert.notice.rule.delete": "Excluir Política de Notificação",
"alert.notice.rule.name": "Nome da Política",
"alert.notice.rule.all": "Despachar Todos",
"alert.notice.rule.enable": "Habilitar",
"alert.notice.rule.tag": "Corresponder Tags",
"alert.notice.rule.tag.placeholder": "Selecione Tags",
"alert.notice.rule.priority": "Corresponder Prioridades",
"alert.notice.rule.priority.placeholder": "Selecione Prioridades",
"alert.notice.rule.period": "Período de Tempo",
"alert.notice.rule.period-chose": "Escolher Data",
"alert.notice.rule.period.no-limit": "Ilimitado",
"alert.notice.rule.period.custom": "Personalizado",
"alert.notice.rule.time": "Hora da Notificação",
"alert.notice.rule.time-start": "Hora de Início",
"alert.notice.rule.time-end": "Hora de Término",
"alert.notice.send-test": "Enviar Mensagem de Teste de Alerta",
"alert.notice.send-test.notify.success": "Envio de Teste de Alerta Bem-sucedido!",
"alert.notice.send-test.notify.failed": "Envio de Teste de Alerta Falhou!",
"alert.notice.sender.enable": "está Habilitado",
"alert.notice.sender.mail.host": "Endereço do Servidor de Email",
"alert.notice.sender.mail.username": "Conta de Email",
"alert.notice.sender.mail.password": "Senha do Email",
"alert.notice.sender.mail.port": "Porta do Email",
"alert.notice.sender.mail.ssl": "Habilitar SSL",
"alert.notice.sender.mail.starttls": "Habilitar STARTTLS",
"alert.notice.sender.mail.enable": "Habilitar Configuração de Email",
"alert.notice.sender.sms.type": "Tipo de SMS",
"alert.notice.sender.sms.type.tencent": "SMS Tencent",
"alert.notice.sender.sms.type.alibaba": "SMS Alibaba",
"alert.notice.sender.sms.tencent.secretId": "SecretId do SMS Tencent",
"alert.notice.sender.sms.tencent.secretKey": "SecretKey do SMS Tencent",
"alert.notice.sender.sms.tencent.signName": "Nome de Assinatura do SMS Tencent",
"alert.notice.sender.sms.tencent.appId": "AppId do SMS Tencent",
"alert.notice.sender.sms.tencent.templateId": "ID do Modelo do SMS Tencent",
"alert.notify.title": "Nova notificação de alarme",
"alert.notify.body": "Você tem um novo alarme, por favor, resolva-o a tempo!",
"alert.export.switch-type": "Selecione o formato do arquivo de exportação!",
"alert.export.use-type": "Exportar regras no formato de arquivo {{type}}",
"alert.group-converge.name": "Nome da política",
"alert.group-converge.name.tip": "Identifica o nome dessa política de agrupamento, que requer exclusiva",
"alert.group-converge.new": "Adicionada estratégia de agrupamento",
"alert.group-converge.repeat-interval": "Intervalo de repetição",
"alert.group-converge.repeat-interval.tip": "Intervalo de notificação mínima para alarmes repetidos. Para alarmes acionados continuamente, evite notificações repetidas, padrão 4 horas",
"alert.group-converge.seconds": "Segundo",
"alert.group-converge.group-labels": "Agrupamento de tags",
"alert.group-converge.group-labels.add": "Adicionar etiqueta",
"alert.group-converge.group-labels.input": "Insira a tag personalizada e pressione Enter",
"alert.group-converge.group-labels.placeholder": "Por favor, insira uma tag",
"alert.group-converge.group-labels.tip": "As mensagens de alarme são agrupadas de acordo com a chave do rótulo do alarme, e várias chaves de rótulo são suportadas, como nome do alerta, gravidade, instância, etc.",
"alert.group-converge.group-wait": "tempo de espera",
"alert.group-converge.group-wait.tip": "O tempo de espera após um novo alarme é gerado, o mesmo alarme recebido nesse período será agrupado, com um padrão de 30 segundos.",
"alert.group-converge.match-all": "Aplique tudo",
"alert.group-converge.group-interval": "Tempo de intervalo",
"alert.group-converge.group-interval.tip": "O intervalo de tempo mínimo para enviar notificações de alarme de grupo para evitar notificações de alarme muito frequentes. O padrão é 5 minutos.",
"dashboard.alerts.title": "Lista de Alarmes Recentes",
"dashboard.alerts.title-no": "Alarmes Pendentes Recentes",
"dashboard.alerts.no": "Nenhum Alarme Pendente",
@@ -88,6 +385,284 @@
"dashboard.monitors.distribute": "Distribuição do Monitor",
"menu.link.question": "FAQ",
"menu.link.guild": "Guia do Usuário",
"monitor_icon.center": "laptop",
"monitor_icon.service": "appstore",
"monitor_icon.db": "console-sql",
"monitor_icon.os": "windows",
"monitor_icon.mid": "cluster",
"monitor_icon.cn": "cloud-server",
"monitor_icon.network": "global",
"monitor_icon.custom": "project",
"monitor_icon.program": "code",
"monitor_icon.cache": "group",
"monitor_icon.bigdata": "dot-chart",
"monitor_icon.webserver": "database",
"monitors.center.help": "O Centro de Monitoramento é o portal de gerenciamento de recursos de monitoramento do HertzBeat. Exibe os monitores atualmente adicionados em forma de lista e suporta agrupamento por tags, filtragem de consulta e acesso para visualizar detalhes de monitoramento. <br> Você pode adicionar, modificar, excluir, pausar monitoramento, importar/exportar, gerenciar em lote e outras operações nos monitores.",
"monitors.center.help.link": "https://hertzbeat.apache.org/docs/",
"monitors.center.search.placeholder": "Pesquisar tipo de monitor para adicionar: Linux, Redis",
"monitors.list": "Lista de Monitores",
"monitors.spinning-tip.detecting": "Detecção Disponível",
"monitors.new": "Novo",
"monitors.new-monitor": "Novo Monitor",
"monitors.new.success": "Novo Monitor Bem-sucedido",
"monitors.new.failed": "Novo Monitor Falhou",
"monitors.edit": "Editar",
"monitors.edit.success": "Atualização do Monitor Bem-sucedida",
"monitors.edit.failed": "Atualização do Monitor Falhou",
"monitors.not-found": "Este Monitor Não Encontrado",
"monitors.delete": "Excluir",
"monitors.edit-monitor": "Editar Monitor",
"monitors.delete-monitor": "Excluir Monitor",
"monitors.enable": "Retomar Monitor",
"monitors.cancel": "Pausar Monitor",
"monitors.export": "Exportar Monitor",
"monitors.export.switch-type": "Selecione o formato do arquivo de exportação!",
"monitors.export.use-type": "Exportar monitores no formato de arquivo {{type}}",
"monitors.import": "Importar Monitor",
"monitors.search.placeholder": "Pesquisar Monitor",
"monitors.search.tag": "Filtrar por Tag",
"monitors.search.app": "Filtrar por Tipo",
"monitors.total": "Total",
"monitors.advanced": "Avançado",
"monitors.advanced.tip": "Parâmetros de Configuração Avançada",
"monitors.detect": "Detectar",
"monitors.detect.success": "Detecção Bem-sucedida",
"monitors.detect.failed": "Detecção Falhou",
"monitors.detect.tip": "Verificar e detectar o status de disponibilidade do monitor",
"monitors.detail.time-series.unavailable": "Incapaz de fornecer gráfico histórico, configure o banco de dados de séries temporais",
"monitors.detail": "Detalhes do Monitor",
"monitors.detail.auto-refresh": "Atualização Automática Após {{time}} s",
"monitors.detail.config-refresh": "Definir Atualização Automática para {{time}} s",
"monitors.detail.close-refresh": "Fechar Atualização Automática",
"monitors.detail.show-basic": "Mostrar Básico do Monitor",
"monitors.detail.name": "Nome",
"monitors.detail.port": "Porta",
"monitors.detail.description": "Descrição",
"monitors.detail.status": "Status",
"monitors.detail.basic": "Básico do Monitoramento",
"monitors.detail.realtime": "Detalhes em Tempo Real do Monitor",
"monitors.detail.history": "Detalhes do Gráfico Histórico do Monitor",
"monitors.collect.time": "Tempo de Coleta",
"monitors.collect.time.tip": "Último Tempo de Coleta",
"monitors.detail.chart.zoom": "Ampliar",
"monitors.detail.chart.back": "Restaurar Zoom",
"monitors.detail.chart.save": "Salvar como Imagem",
"monitors.detail.chart.query-1h": "Consultar 1 Hora",
"monitors.detail.chart.query-6h": "Consultar 6 Horas",
"monitors.detail.chart.query-1d": "Consultar 1 Dia",
"monitors.detail.chart.query-1w": "Consultar 1 Semana",
"monitors.detail.chart.query-1m": "Consultar 1 Mês",
"monitors.detail.chart.query-3m": "Consultar 3 Meses",
"monitors.detail.chart.no-data": "Nenhum Dado de Métrica",
"monitors.detail.chart.unit": "Unidade",
"monitors.detail.value.null": "Nenhum Valor",
"monitor.new-monitor": "Adicionar monitoramento",
"monitor.center.help": "O Centro de Monitoramento é a entrada para gerenciamento de recursos de monitoramento, exibindo os monitores atualmente adicionados em formato de lista, com suporte a agrupamento por tags, filtragem de pesquisa, visualização de detalhes do monitor, etc.<br>Você pode realizar operações como adicionar, modificar, excluir, pausar monitoramento, importar/exportar e gerenciamento em lote.",
"monitor.center.help.link": "https://hertzbeat.apache.org/pt-br/docs/#centro-de-monitoramento",
"monitor.center.search.placeholder": "Pesquisar tipos de tarefas de monitoramento a adicionar: Linux, Redis",
"monitor.coilRegisterAddresses.tip": "Insira os endereços dos registradores",
"monitor.collect.time": "Tempo de coleta",
"monitor.collect.time.tip": "Último tempo de coleta",
"monitor.collector": "Coletor",
"monitor.collector.status.offline": "Offline",
"monitor.collector.status.online": "Online",
"monitor.collector.system.default": "Agendamento padrão do sistema",
"monitor.collector.tip": "Configurar qual coletor será usado para agendar a coleta deste monitor",
"monitor.content.tip": "3025020101040",
"monitor.contentType.tip": "Tipo de conteúdo do corpo da requisição",
"monitor.copy": "Copiar monitor",
"monitor.copy-monitor": "Copiar monitor",
"monitor.copy.failed": "Falha ao copiar o monitor",
"monitor.copy.notify.one-select": "Selecione apenas um monitor para copiar",
"monitor.copy.success": "Monitor copiado com sucesso",
"monitor.delete": "Excluir",
"monitor.delete-monitor": "Excluir monitor",
"monitor.description": "Descrição/Nota",
"monitor.description.tip": "Mais informações para identificar e descrever esta tarefa",
"monitor.detail": "Detalhes do monitor",
"monitor.detail.auto-refresh": "Atualização automática a cada {{time}} segundos",
"monitor.detail.basic": "Informações da tarefa de monitoramento",
"monitor.detail.chart.back": "Restaurar zoom",
"monitor.detail.chart.no-data": "Sem dados disponíveis",
"monitor.detail.chart.query-1d": "Consultar últimos 1 dia",
"monitor.detail.chart.query-1h": "Consultar últimas 1 hora",
"monitor.detail.chart.query-1m": "Consultar últimos 1 mês",
"monitor.detail.chart.query-1w": "Consultar últimos 1 semana",
"monitor.detail.chart.query-3m": "Consultar últimos 3 meses",
"monitor.detail.chart.query-6h": "Consultar últimas 6 horas",
"monitor.detail.chart.save": "Salvar imagem",
"monitor.detail.chart.unit": "Unidade",
"monitor.detail.chart.zoom": "Zoom na área",
"monitor.detail.close-refresh": "Desativar atualização automática",
"monitor.detail.config-refresh": "Configurar atualização automática a cada {{time}} segundos",
"monitor.detail.description": "Descrição",
"monitor.detail.history": "Detalhes históricos do monitor (gráficos)",
"monitor.detail.name": "Nome",
"monitor.detail.port": "Porta",
"monitor.detail.realtime": "Dados em tempo real do monitor",
"monitor.detail.show-basic": "Exibir atributos básicos do monitor",
"monitor.detail.status": "Status",
"monitor.detail.time-series.unavailable": "Dados históricos não disponíveis - configure um banco de dados de série temporal",
"monitor.detail.value.null": "Sem dados",
"monitor.detect": "Testar conexão",
"monitor.detect.failed": "Falha no teste de conexão",
"monitor.detect.success": "Conexão testada com sucesso",
"monitor.detect.tip": "Verificar a disponibilidade do monitor",
"monitor.edit": "Editar",
"monitor.edit-monitor": "Editar monitor",
"monitor.edit.failed": "Falha ao modificar o monitor",
"monitor.edit.success": "Monitor modificado com sucesso",
"monitor.enable": "Retomar monitoramento",
"monitor.export": "Exportar monitor",
"monitor.export.switch-type": "Selecione o formato do arquivo de exportação!",
"monitor.export.use-type": "Exportar monitor no formato {{type}}",
"monitor.grafana.enabled.label": "Habilitar Grafana",
"monitor.grafana.enabled.tip": "Habilitar Grafana?",
"monitor.grafana.upload.label": "Carregar modelo do Grafana",
"monitor.grafana.upload.tip": "Carregar arquivo JSON do Grafana",
"monitor.headerName.tip": "Nome do cabeçalho",
"monitor.headerValue.tip": "Valor do cabeçalho",
"monitor.holdingRegisterAddresses.tip": "Insira os endereços dos registradores",
"monitor.host": "Host de destino",
"monitor.host.tip": "IP ou domínio do dispositivo monitorado",
"monitor.icon.bigdata": "dot-chart",
"monitor.icon.cache": "group",
"monitor.icon.center": "laptop",
"monitor.icon.cn": "cloud-server",
"monitor.icon.custom": "project",
"monitor.icon.db": "console-sql",
"monitor.icon.mid": "cluster",
"monitor.icon.network": "global",
"monitor.icon.os": "windows",
"monitor.icon.program": "code",
"monitor.icon.service": "appstore",
"monitor.icon.webserver": "database",
"monitor.import": "Importar monitor",
"monitor.intervals": "Intervalo de monitoramento",
"monitor.intervals.tip": "Intervalo de tempo para coleta periódica de dados (em segundos)",
"monitor.keyword.tip": "Insira a palavra-chave a ser monitorada",
"monitor.list": "Lista de monitores",
"monitor.name": "Nome da tarefa",
"monitor.name.tip": "Nome para identificar a tarefa de monitoramento",
"monitor.new": "Adicionar",
"monitor.new.failed": "Falha ao adicionar monitor",
"monitor.new.notify.change-to-http": "HTTPS desativado - a porta foi alterada automaticamente para 80.",
"monitor.new.notify.change-to-https": "HTTPS ativado - a porta foi alterada automaticamente para 443.",
"monitor.new.notify.change-to-ftp": "SFTP desativado - a porta foi alterada automaticamente para 21.",
"monitor.new.notify.change-to-sftp": "SFTP ativado - a porta foi alterada automaticamente para 22.",
"monitor.new.success": "Monitor adicionado com sucesso",
"monitor.not-found": "Erro na consulta - este monitor não existe",
"monitor.path.tip": "Caminho do endpoint do exportador",
"monitor.payload.tip": "Usado para POST/PUT",
"monitor.privateKey.tip": "Chave privada RSA",
"monitor.search.app": "Filtrar por tipo",
"monitor.search.placeholder": "Pesquisar monitor",
"monitor.search.label": "Filtrar por tag",
"monitor.sitemap.tip": "Mapa do site (exemplo: /sitemap.xml)",
"monitor.spinning-tip.detecting": "Testando conectividade...",
"monitor.status": "Status da tarefa",
"monitor.status.all": "Todos os status",
"monitor.status.down": "Inativo",
"monitor.status.paused": "Pausado",
"monitor.status.unreachable": "Inacessível",
"monitor.status.up": "Normal",
"monitor.total": "Total",
"monitor.uri.tip": "Caminho URI do site (sem IP/porta) Exemplo: /console",
"monitor.url.tip": "Serviço: jmx:rmi:///jndi/rmi://host:porta/jmxrmi",
"monitor.sshHost.tip": "Obrigatório quando túnel SSH está ativo",
"monitor.sshPort.tip": "Obrigatório quando túnel SSH está ativo",
"monitor.sshUsername.tip": "Obrigatório quando túnel SSH está ativo",
"monitor.sshPrivateKey.tip": "Chave privada RSA",
"monitor.scrape.type.static": "Estatico",
"monitor.scrape.type.http_sd": "Http Service Discovery",
"monitor.scrape.type.nacos_sd": "Nacos Service Discovery",
"monitor.scrape.type.dns_sd": "Dns Service Discovery",
"monitor.scrape.type.eureka_sd": "Eureka Service Discovery",
"monitor.scrape.type.consul_sd": "Consul Service Discovery",
"monitor.scrape.type.zookeeper_sd": "Zookeeper Service Discovery",
"common.name": "Nome da Métrica",
"common.value": "Valor da Métrica",
"common.search": "Pesquisar",
"common.refresh": "Atualizar",
"common.notice": "Notificação",
"common.ignore": "Ignorar",
"common.edit-time": "Tempo de Atualização",
"common.new-time": "Tempo de Criação",
"common.edit": "Operar",
"common.total": "Total",
"common.yes": "Sim",
"common.no": "Não",
"common.mute": "Mudo",
"common.unmute": "Ativar som",
"common.enable": "Habilitar",
"common.disable": "Desabilitar",
"common.copy": "Copiar para a Área de Transferência",
"common.copy.button": "Copiar",
"common.notify.no-select-edit": "Nenhum item selecionado para edição!",
"common.notify.one-select-edit": "Apenas uma seleção pode ser editada!",
"common.confirm.delete": "Confirme se deseja excluir!",
"common.notify.no-select-delete": "Nenhum item selecionado para exclusão!",
"common.notify.no-select-export": "Nenhum item selecionado para exportação!",
"common.confirm.delete-batch": "Confirme se deseja excluir em lote!",
"common.notify.delete-success": "Exclusão Bem-sucedida!",
"common.notify.delete-fail": "Exclusão Falhou!",
"common.notify.new-success": "Adição Bem-sucedida!",
"common.notify.new-fail": "Adição Falhou!",
"common.notify.apply-success": "Aplicação Bem-sucedida!",
"common.notify.apply-fail": "Aplicação Falhou!",
"common.notify.operate-success": "Operação Bem-sucedida!",
"common.notify.operate-fail": "Operação Falhou!",
"common.notify.monitor-fail": "Consulta do Monitor Falhou!",
"common.notify.edit-success": "Edição Bem-sucedida!",
"common.notify.edit-fail": "Edição Falhou!",
"common.notify.no-select-cancel": "Nenhum item selecionado para cancelamento!",
"common.confirm.cancel-batch": "Confirme se deseja cancelar o monitor em lote!",
"common.confirm.cancel": "Confirme se deseja cancelar o monitor!",
"common.notify.cancel-success": "Cancelamento Bem-sucedido!",
"common.notify.cancel-fail": "Cancelamento Falhou!",
"common.notify.mark-success": "Marca Bem-sucedida!",
"common.notify.mark-fail": "Marca Falhou!",
"common.notify.no-select-enable": "Nenhum item selecionado para habilitar!",
"common.confirm.enable-batch": "Confirme se deseja habilitar o monitor em lote!",
"common.confirm.enable": "Confirme se deseja habilitar o monitor!",
"common.notify.enable-success": "Habilitação Bem-sucedida!",
"common.notify.enable-fail": "Habilitação Falhou!",
"common.confirm.clear-cache": "Confirme se deseja limpar o cache!",
"common.notify.clear-success": "Limpeza Bem-sucedida!",
"common.notify.clear-fail": "Limpeza Falhou!",
"common.notify.export-success": "Exportação Bem-sucedida!",
"common.notify.export-fail": "Exportação Falhou!",
"common.notify.import-success": "Importação Bem-sucedida!",
"common.notify.import-fail": "Importação Falhou!",
"common.notify.copy-success": "Cópia Bem-sucedida!",
"common.button.ok": "OK",
"common.button.new": "Novo",
"common.button.cancel": "Cancelar",
"common.button.return": "Retornar",
"common.button.help": "Ajuda",
"common.button.edit": "Editar",
"common.button.setting": "Configuração",
"common.button.delete": "Excluir",
"common.button.detect": "Detectar",
"common.annotation": "anotação",
"common.annotation.bind": "Anotação de ligação",
"common.annotation.bind.tip": "As anotações podem ser usadas para marcar informações da entidade, como anotações vinculativas para eventos importantes para um recurso.",
"common.button.collapse": "Fechar",
"common.button.confirm": "confirmar",
"common.button.copy": "cópia",
"common.button.copy.tip": "Clique para copiar",
"common.button.expand": "Expandir",
"common.button.export": "Exportar",
"common.button.import": "Importar",
"common.week.7": "Domingo",
"common.week.1": "Segunda-feira",
"common.week.2": "Terça-feira",
"common.week.3": "Quarta-feira",
"common.week.4": "Quinta-feira",
"common.week.5": "Sexta-feira",
"common.week.6": "Sábado",
"common.time.unit.second": "Segundo",
"common.file.select": "Selecionar Arquivo",
"validation.email.invalid": "Email inválido",
"validation.phone.invalid": "Número de telefone inválido",
"validation.verification-code.invalid": "Código de verificação inválido, deve ter 6 dígitos",
@@ -170,6 +745,59 @@
"label.value": "Valor da etiqueta",
"labels.help": "As tags estão por toda parte, podemos aplicar tags ao agrupamento de recursos, correspondência de tags sob regras e outros cenários. O gerenciamento de tags é usado para gerenciar e manter tags de maneira unificada, incluindo adicionar, excluir, editar e outras operações. <br> Por exemplo: você pode usar tags para classificar e gerenciar recursos de monitoramento, vincular as tags do ambiente de produção e testar o ambiente dos recursos e combinar notificadores diferentes por meio de tags ao alertar.",
"labels.help.link": "https://hertzbeat.apache.org/docs/",
"menu.account": "Página pessoal",
"menu.account.binding": "Vinculação de conta",
"menu.account.center": "Centro pessoal",
"menu.account.logout": "desistir",
"menu.account.security": "Configurações de segurança",
"menu.account.settings": "Configurações de Conta",
"menu.account.trigger": "erro de gatilho",
"menu.advanced": "Avançado",
"menu.advanced.collector": "Cluster de coleção",
"menu.advanced.define": "Modelo de monitoramento",
"menu.advanced.labels": "Gerenciamento de tags",
"menu.advanced.plugins": "Gerenciamento de plug-ins",
"menu.advanced.status": "Página de status",
"menu.alert": "Alarme",
"menu.alert.center": "Central de alarme",
"menu.alert.converge": "Convergência",
"menu.alert.dispatch": "Notificação de mensagem",
"menu.alert.group": "Convergência de grupo",
"menu.alert.inhibit": "Supressão de alarme",
"menu.alert.integration": "Acesso integrado",
"menu.alert.setting": "Regras de limite",
"menu.alert.silence": "Silêncio de alarme",
"menu.clear.local.storage": "Limpe o cache local",
"menu.dashboard": "Painel",
"menu.extras": "Mais",
"menu.extras.about": "sobre",
"menu.extras.help": "Centro de ajuda",
"menu.extras.setting": "configurar",
"menu.extras.settings": "Configurações do sistema",
"menu.fullscreen": "Tela cheia",
"menu.fullscreen.exit": "Saia de tela cheia",
"menu.lang": "linguagem",
"menu.main": "Navegação principal",
"menu.monitor": "monitor",
"menu.monitor.bigdata": "Monitoramento de Big Data",
"menu.monitor.bulletin": "Boletim personalizado",
"menu.monitor.cache": "Monitoramento de cache",
"menu.monitor.center": "Central de monitoramento",
"menu.monitor.cn": "Monitoramento nativo em nuvem",
"menu.monitor.custom": "Monitoramento personalizado",
"menu.monitor.db": "Monitoramento do banco de dados",
"menu.monitor.llm": "Modelo grande de IA",
"menu.monitor.mid": "Monitoramento de middleware",
"menu.monitor.network": "Monitoramento da rede",
"menu.monitor.os": "Monitoramento do sistema operacional",
"menu.monitor.program": "Monitoramento de aplicativos",
"menu.monitor.prometheus": "Tarefas do Prometheus",
"menu.monitor.promql": "Consulta de dados",
"menu.monitor.server": "Monitoramento de servidor",
"menu.monitor.service": "Monitoramento do Serviço de Aplicativo",
"menu.monitor.webserver": "Monitoramento do servidor da web",
"menu.more": "Mais",
"menu.search.placeholder": "Pesquise os nomes de tarefas de monitoramento, hosts, etc.",
"settings.server": "Configuração do Servidor de Mensagens",
"settings.server.email": "Servidor de Email",
"settings.server.email.setting": "Configurar Servidor de Email",
@@ -402,8 +1030,6 @@
"alert.help.setting.link": "https://hertzbeat.apache.org/docs/help/alert_threshold",
"alert.help.silence": "O gerenciamento de Silêncio de Alarmes é usado quando você não quer ser perturbado durante a manutenção do sistema ou nos fins de semana. <br> Clique em \"<i>Nova Estratégia de Silêncio</i>\" e configure o período de tempo para bloquear mensagens para que você não seja perturbado durante os intervalos.",
"alert.help.silence.link": "https://hertzbeat.apache.org/docs",
"alert.help.integration": "Gerenciamento unificado de alarmes de diferentes plataformas de terceiros, acesso integrado às mensagens de alarme de sistemas de monitoramento e observação de terceiros, agrupamento, convergência, supressão, silenciamento e distribuição de notificações.",
"alert.help.inhibit": "A supressão de alarmes é usada para configurar a relação de supressão entre alarmes. Quando um alarme ocorre, outros alarmes podem ser suprimidos. Por exemplo, quando um servidor cai, todos os alarmes no servidor podem ser suprimidos.",
"alert.notice.template": "Modelo de Notificação",
"alert.notice.template.new": "Novo Modelo",
"alert.notice.template.edit": "Editar Modelo",
@@ -508,87 +1134,6 @@
"alert.integration.source.skywalking": "SkyWalking",
"alert.integration.source.uptime-kuma": "Uptime Kuma",
"alert.integration.source.zabbix": "Zabbix",
"alert.integration.source": "Fonte de alarme integrada",
"alert.integration.source.alertmanager": "Alertmanager",
"alert.integration.source.prometheus": "Prometheus",
"alert.integration.source.tencent": "Monitoramento de nuvem Tencent",
"alert.integration.source.webhook": "PadrãoWebhook",
"alert.integration.source.alibabacloud-sls": "AlibabaCloud-SLS",
"alert.integration.source.huaweicloud-ces": "Huawei Cloud Eye",
"alert.integration.source.volcengine": "Volcengine",
"alert.integration.token.desc": "O token gerado pode ser usado para acessar a API HertzBeat",
"alert.integration.token.new": "Clique para gerar token",
"alert.integration.token.notice": "Este conteúdo será exibido apenas uma vez, por favor guarde seu token adequadamente e não o divulgue a terceiros.",
"alert.integration.token.title": "Token de autenticação de acesso",
"alert.setting.name": "Nome do limite",
"alert.setting.type": "Tipo de limite",
"alert.setting.name.tip": "O nome da regra de limite precisa ser exclusivo",
"alert.setting.new.periodic": "Adicionar novo limite do plano",
"alert.setting.new.realtime": "Adicionado limite em tempo real",
"alert.setting.period": "Ciclo de execução",
"alert.setting.period.placeholder": "Insira o período de execução, mínimo de 60 segundos",
"alert.setting.edit.periodic": "Editar limiar do plano",
"alert.setting.edit.realtime": "Editar limites em tempo real",
"alert.setting.bind.available": "Monitoramento opcional",
"alert.setting.bind.manage": "Monitoramento relacionado",
"alert.setting.bind.monitors": "Monitoramento relacionado",
"alert.setting.bind.monitors.tip": "Configure essa regra de limiar para aplicar à tarefa de monitoramento especificada, e o padrão é que todos os aplicativos não estão associados.",
"alert.setting.bind.need-save": "Selecione primeiro o tipo de indicador e depois realize a associação de monitoramento.",
"alert.setting.bind.selected": "Monitoramento selecionado",
"alert.setting.template.vars.app": "Tipo de aplicativo",
"alert.setting.template.vars.instance": "ID da instância",
"alert.setting.template.vars.instance-name": "Nome da instância",
"alert.setting.template.vars.instance-host": "Exemplo de host",
"alert.setting.template.vars.metrics": "Nome métrico",
"alert.setting.template.vars.threshold": "expressão limite",
"alert.setting.template.vars.time": "Tempo de gatilho",
"alert.setting.template.vars.tip": "Inserir indicador ou operador",
"alert.setting.template.vars.value": "Valor de gatilho",
"alert.severity": "Nível de alarme",
"alert.severity.0": "Alarme de emergência",
"alert.severity.1": "Alarme sério",
"alert.severity.2": "Alerta de aviso",
"alert.severity.all": "Todos",
"alert.status": "Estado do alarme",
"alert.status.all": "Todos os status",
"alert.status.firing": "Alarmante",
"alert.status.resolved": "Restaurado",
"alert.help.group": "O agrupamento de convergência suporta combinar alarmes para rótulos de agrupamento especificados, desduplicação e convergência dos mesmos alarmes repetidos para o período. Você pode clicar em \"<i> Adicionar política de agrupamento </i>\" e configurá -la. <br> Quando a regra do limiar aciona o relatório de alarme ou alarme externo, ele entrará na convergência do pacote para conduzir o agrupamento de alarme e o alarme é desduplicado para evitar um grande número de mensagens de alarme causando tempestades de alarme.",
"alert.help.group.link": "https://hertzbeat.apache.org/docs/#%E5%91%8A%E8%AD%A6%E6%94%B6%E6%95%9B",
"alert.inhibit.delete": "Excluir regras de supressão",
"alert.inhibit.edit": "Editar regras de supressão",
"alert.inhibit.enable.tip": "Se deve ativar esta regra de supressão",
"alert.inhibit.equal_labels": "Tags iguais",
"alert.inhibit.equal_labels.common": "Tags comuns",
"alert.inhibit.equal_labels.custom": "Tags personalizadas",
"alert.inhibit.equal_labels.more": "Existem também {{count}} tags",
"alert.inhibit.equal_labels.placeholder": "Digite o nome da tag e pressione Enter ou selecione na lista suspensa",
"alert.inhibit.equal_labels.tip": "As chaves de tag e os valores correspondentes dos alarmes de origem e dos alarmes de destino devem ser iguais. As chaves de tag comuns incluem alertname, instância, gravidade, etc.",
"alert.inhibit.name": "Suprimir nome da regra",
"alert.inhibit.name.tip": "Um nome que identifique esta regra de supressão precisa ser exclusivo",
"alert.inhibit.new": "Adicionado regras de supressão",
"alert.inhibit.source_labels": "etiqueta de origem",
"alert.inhibit.source_labels.tip": "Quando um alarme contém essas tags, o alarme alvo será suprimido",
"alert.inhibit.target_labels": "Tags de destino",
"alert.inhibit.target_labels.tip": "Alarmes que correspondem a essas tags serão suprimidos",
"alert.notify.title": "Nova notificação de alarme",
"alert.notify.body": "Você tem um novo alarme, por favor, resolva-o a tempo!",
"alert.group-converge.name": "Nome da política",
"alert.group-converge.name.tip": "Identifica o nome dessa política de agrupamento, que requer exclusiva",
"alert.group-converge.new": "Adicionada estratégia de agrupamento",
"alert.group-converge.repeat-interval": "Intervalo de repetição",
"alert.group-converge.repeat-interval.tip": "Intervalo de notificação mínima para alarmes repetidos. Para alarmes acionados continuamente, evite notificações repetidas, padrão 4 horas",
"alert.group-converge.seconds": "Segundo",
"alert.group-converge.group-labels": "Agrupamento de tags",
"alert.group-converge.group-labels.add": "Adicionar etiqueta",
"alert.group-converge.group-labels.input": "Insira a tag personalizada e pressione Enter",
"alert.group-converge.group-labels.placeholder": "Por favor, insira uma tag",
"alert.group-converge.group-labels.tip": "As mensagens de alarme são agrupadas de acordo com a chave do rótulo do alarme, e várias chaves de rótulo são suportadas, como nome do alerta, gravidade, instância, etc.",
"alert.group-converge.group-wait": "tempo de espera",
"alert.group-converge.group-wait.tip": "O tempo de espera após um novo alarme é gerado, o mesmo alarme recebido nesse período será agrupado, com um padrão de 30 segundos.",
"alert.group-converge.match-all": "Aplique tudo",
"alert.group-converge.group-interval": "Tempo de intervalo",
"alert.group-converge.group-interval.tip": "O intervalo de tempo mínimo para enviar notificações de alarme de grupo para evitar notificações de alarme muito frequentes. O padrão é 5 minutos.",
"dashboard.alerts.title": "Lista de Alarmes Recentes",
"dashboard.alerts.title-no": "Alarmes Pendentes Recentes",
"dashboard.alerts.no": "Nenhum Alarme Pendente",
@@ -604,59 +1149,6 @@
"dashboard.monitors.distribute": "Distribuição do Monitor",
"menu.link.question": "FAQ",
"menu.link.guild": "Guia do Usuário",
"menu.account": "Página pessoal",
"menu.account.binding": "Vinculação de conta",
"menu.account.center": "Centro pessoal",
"menu.account.logout": "desistir",
"menu.account.security": "Configurações de segurança",
"menu.account.settings": "Configurações de Conta",
"menu.account.trigger": "erro de gatilho",
"menu.advanced": "Avançado",
"menu.advanced.collector": "Cluster de coleção",
"menu.advanced.define": "Modelo de monitoramento",
"menu.advanced.labels": "Gerenciamento de tags",
"menu.advanced.plugins": "Gerenciamento de plug-ins",
"menu.advanced.status": "Página de status",
"menu.alert": "Alarme",
"menu.alert.center": "Central de alarme",
"menu.alert.converge": "Convergência",
"menu.alert.dispatch": "Notificação de mensagem",
"menu.alert.group": "Convergência de grupo",
"menu.alert.inhibit": "Supressão de alarme",
"menu.alert.integration": "Acesso integrado",
"menu.alert.setting": "Regras de limite",
"menu.alert.silence": "Silêncio de alarme",
"menu.clear.local.storage": "Limpe o cache local",
"menu.dashboard": "Painel",
"menu.extras": "Mais",
"menu.extras.about": "sobre",
"menu.extras.help": "Centro de ajuda",
"menu.extras.setting": "configurar",
"menu.extras.settings": "Configurações do sistema",
"menu.fullscreen": "Tela cheia",
"menu.fullscreen.exit": "Saia de tela cheia",
"menu.lang": "linguagem",
"menu.main": "Navegação principal",
"menu.monitor": "monitor",
"menu.monitor.bigdata": "Monitoramento de Big Data",
"menu.monitor.bulletin": "Boletim personalizado",
"menu.monitor.cache": "Monitoramento de cache",
"menu.monitor.center": "Central de monitoramento",
"menu.monitor.cn": "Monitoramento nativo em nuvem",
"menu.monitor.custom": "Monitoramento personalizado",
"menu.monitor.db": "Monitoramento do banco de dados",
"menu.monitor.llm": "Modelo grande de IA",
"menu.monitor.mid": "Monitoramento de middleware",
"menu.monitor.network": "Monitoramento da rede",
"menu.monitor.os": "Monitoramento do sistema operacional",
"menu.monitor.program": "Monitoramento de aplicativos",
"menu.monitor.prometheus": "Tarefas do Prometheus",
"menu.monitor.promql": "Consulta de dados",
"menu.monitor.server": "Monitoramento de servidor",
"menu.monitor.service": "Monitoramento do Serviço de Aplicativo",
"menu.monitor.webserver": "Monitoramento do servidor da web",
"menu.more": "Mais",
"menu.search.placeholder": "Pesquise os nomes de tarefas de monitoramento, hosts, etc.",
"monitor_icon.center": "laptop",
"monitor_icon.service": "appstore",
"monitor_icon.db": "console-sql",
@@ -728,130 +1220,6 @@
"monitors.detail.chart.no-data": "Nenhum Dado de Métrica",
"monitors.detail.chart.unit": "Unidade",
"monitors.detail.value.null": "Nenhum Valor",
"monitor.new-monitor": "Adicionar monitoramento",
"monitor.center.help": "O Centro de Monitoramento é a entrada para gerenciamento de recursos de monitoramento, exibindo os monitores atualmente adicionados em formato de lista, com suporte a agrupamento por tags, filtragem de pesquisa, visualização de detalhes do monitor, etc.<br>Você pode realizar operações como adicionar, modificar, excluir, pausar monitoramento, importar/exportar e gerenciamento em lote.",
"monitor.center.help.link": "https://hertzbeat.apache.org/pt-br/docs/#centro-de-monitoramento",
"monitor.center.search.placeholder": "Pesquisar tipos de tarefas de monitoramento a adicionar: Linux, Redis",
"monitor.coilRegisterAddresses.tip": "Insira os endereços dos registradores",
"monitor.collect.time": "Tempo de coleta",
"monitor.collect.time.tip": "Último tempo de coleta",
"monitor.collector": "Coletor",
"monitor.collector.status.offline": "Offline",
"monitor.collector.status.online": "Online",
"monitor.collector.system.default": "Agendamento padrão do sistema",
"monitor.collector.tip": "Configurar qual coletor será usado para agendar a coleta deste monitor",
"monitor.content.tip": "3025020101040",
"monitor.contentType.tip": "Tipo de conteúdo do corpo da requisição",
"monitor.copy": "Copiar monitor",
"monitor.copy-monitor": "Copiar monitor",
"monitor.copy.failed": "Falha ao copiar o monitor",
"monitor.copy.notify.one-select": "Selecione apenas um monitor para copiar",
"monitor.copy.success": "Monitor copiado com sucesso",
"monitor.delete": "Excluir",
"monitor.delete-monitor": "Excluir monitor",
"monitor.description": "Descrição/Nota",
"monitor.description.tip": "Mais informações para identificar e descrever esta tarefa",
"monitor.detail": "Detalhes do monitor",
"monitor.detail.auto-refresh": "Atualização automática a cada {{time}} segundos",
"monitor.detail.basic": "Informações da tarefa de monitoramento",
"monitor.detail.chart.back": "Restaurar zoom",
"monitor.detail.chart.no-data": "Sem dados disponíveis",
"monitor.detail.chart.query-1d": "Consultar últimos 1 dia",
"monitor.detail.chart.query-1h": "Consultar últimas 1 hora",
"monitor.detail.chart.query-1m": "Consultar últimos 1 mês",
"monitor.detail.chart.query-1w": "Consultar últimos 1 semana",
"monitor.detail.chart.query-3m": "Consultar últimos 3 meses",
"monitor.detail.chart.query-6h": "Consultar últimas 6 horas",
"monitor.detail.chart.save": "Salvar imagem",
"monitor.detail.chart.unit": "Unidade",
"monitor.detail.chart.zoom": "Zoom na área",
"monitor.detail.close-refresh": "Desativar atualização automática",
"monitor.detail.config-refresh": "Configurar atualização automática a cada {{time}} segundos",
"monitor.detail.description": "Descrição",
"monitor.detail.history": "Detalhes históricos do monitor (gráficos)",
"monitor.detail.name": "Nome",
"monitor.detail.port": "Porta",
"monitor.detail.realtime": "Dados em tempo real do monitor",
"monitor.detail.show-basic": "Exibir atributos básicos do monitor",
"monitor.detail.status": "Status",
"monitor.detail.time-series.unavailable": "Dados históricos não disponíveis - configure um banco de dados de série temporal",
"monitor.detail.value.null": "Sem dados",
"monitor.detect": "Testar conexão",
"monitor.detect.failed": "Falha no teste de conexão",
"monitor.detect.success": "Conexão testada com sucesso",
"monitor.detect.tip": "Verificar a disponibilidade do monitor",
"monitor.edit": "Editar",
"monitor.edit-monitor": "Editar monitor",
"monitor.edit.failed": "Falha ao modificar o monitor",
"monitor.edit.success": "Monitor modificado com sucesso",
"monitor.enable": "Retomar monitoramento",
"monitor.export": "Exportar monitor",
"monitor.export.switch-type": "Selecione o formato do arquivo de exportação!",
"monitor.export.use-type": "Exportar monitor no formato {{type}}",
"monitor.grafana.enabled.label": "Habilitar Grafana",
"monitor.grafana.enabled.tip": "Habilitar Grafana?",
"monitor.grafana.upload.label": "Carregar modelo do Grafana",
"monitor.grafana.upload.tip": "Carregar arquivo JSON do Grafana",
"monitor.headerName.tip": "Nome do cabeçalho",
"monitor.headerValue.tip": "Valor do cabeçalho",
"monitor.holdingRegisterAddresses.tip": "Insira os endereços dos registradores",
"monitor.host": "Host de destino",
"monitor.host.tip": "IP ou domínio do dispositivo monitorado",
"monitor.icon.bigdata": "dot-chart",
"monitor.icon.cache": "group",
"monitor.icon.center": "laptop",
"monitor.icon.cn": "cloud-server",
"monitor.icon.custom": "project",
"monitor.icon.db": "console-sql",
"monitor.icon.mid": "cluster",
"monitor.icon.network": "global",
"monitor.icon.os": "windows",
"monitor.icon.program": "code",
"monitor.icon.service": "appstore",
"monitor.icon.webserver": "database",
"monitor.import": "Importar monitor",
"monitor.intervals": "Intervalo de monitoramento",
"monitor.intervals.tip": "Intervalo de tempo para coleta periódica de dados (em segundos)",
"monitor.keyword.tip": "Insira a palavra-chave a ser monitorada",
"monitor.list": "Lista de monitores",
"monitor.name": "Nome da tarefa",
"monitor.name.tip": "Nome para identificar a tarefa de monitoramento",
"monitor.new": "Adicionar",
"monitor.new.failed": "Falha ao adicionar monitor",
"monitor.new.notify.change-to-http": "HTTPS desativado - a porta foi alterada automaticamente para 80.",
"monitor.new.notify.change-to-https": "HTTPS ativado - a porta foi alterada automaticamente para 443.",
"monitor.new.notify.change-to-ftp": "SFTP desativado - a porta foi alterada automaticamente para 21.",
"monitor.new.notify.change-to-sftp": "SFTP ativado - a porta foi alterada automaticamente para 22.",
"monitor.new.success": "Monitor adicionado com sucesso",
"monitor.not-found": "Erro na consulta - este monitor não existe",
"monitor.path.tip": "Caminho do endpoint do exportador",
"monitor.payload.tip": "Usado para POST/PUT",
"monitor.privateKey.tip": "Chave privada RSA",
"monitor.search.app": "Filtrar por tipo",
"monitor.search.placeholder": "Pesquisar monitor",
"monitor.search.label": "Filtrar por tag",
"monitor.sitemap.tip": "Mapa do site (exemplo: /sitemap.xml)",
"monitor.spinning-tip.detecting": "Testando conectividade...",
"monitor.status": "Status da tarefa",
"monitor.status.all": "Todos os status",
"monitor.status.down": "Inativo",
"monitor.status.paused": "Pausado",
"monitor.status.unreachable": "Inacessível",
"monitor.status.up": "Normal",
"monitor.total": "Total",
"monitor.uri.tip": "Caminho URI do site (sem IP/porta) Exemplo: /console",
"monitor.url.tip": "Serviço: jmx:rmi:///jndi/rmi://host:porta/jmxrmi",
"monitor.sshHost.tip": "Obrigatório quando túnel SSH está ativo",
"monitor.sshPort.tip": "Obrigatório quando túnel SSH está ativo",
"monitor.sshUsername.tip": "Obrigatório quando túnel SSH está ativo",
"monitor.sshPrivateKey.tip": "Chave privada RSA",
"monitor.scrape.type.static": "Estatico",
"monitor.scrape.type.http_sd": "Http Service Discovery",
"monitor.scrape.type.nacos_sd": "Nacos Service Discovery",
"monitor.scrape.type.dns_sd": "Dns Service Discovery",
"monitor.scrape.type.eureka_sd": "Eureka Service Discovery",
"monitor.scrape.type.consul_sd": "Consul Service Discovery",
"monitor.scrape.type.zookeeper_sd": "Zookeeper Service Discovery",
"common.name": "Nome da Métrica",
"common.value": "Valor da Métrica",
"common.search": "Pesquisar",
@@ -922,19 +1290,6 @@
"common.week.6": "Sábado",
"common.time.unit.second": "Segundos",
"common.file.select": "Selecionar Arquivo",
"common.mute": "Mudo",
"common.unmute": "Ativar som",
"common.button.new": "Novo",
"common.annotation": "anotação",
"common.annotation.bind": "Anotação de ligação",
"common.annotation.bind.tip": "As anotações podem ser usadas para marcar informações da entidade, como anotações vinculativas para eventos importantes para um recurso.",
"common.button.collapse": "Fechar",
"common.button.confirm": "confirmar",
"common.button.copy": "cópia",
"common.button.copy.tip": "Clique para copiar",
"common.button.expand": "Expandir",
"common.button.export": "Exportar",
"common.button.import": "Importar",
"validation.email.invalid": "Email inválido",
"validation.phone.invalid": "Número de telefone inválido",
"validation.verification-code.invalid": "Código de verificação inválido, deve ter 6 dígitos",
-1
View File
@@ -102,7 +102,6 @@
"alert.integration.source.zabbix": "Zabbix",
"alert.integration.source.alibabacloud-sls": "阿里云日志服务 SLS",
"alert.integration.source.huaweicloud-ces": "华为云监控服务",
"alert.integration.source.volcengine":"火山引擎云监控",
"alert.integration.token.desc": "生成的 Token 可用于访问 HertzBeat API",
"alert.integration.token.new": "点击生成 Token",
"alert.integration.token.notice": "此内容只会展示一次,请妥善保管您的 Token,不要泄露给他人",
-1
View File
@@ -102,7 +102,6 @@
"alert.integration.source.zabbix": "Zabbix",
"alert.integration.source.alibabacloud-sls": "阿里雲端日誌服務 SLS",
"alert.integration.source.huaweicloud-ces": "華為雲監控服務",
"alert.integration.source.volcengine":"火山引擎監控",
"alert.integration.token.desc": "生成的 Token 可用于访问 HertzBeat API",
"alert.integration.token.new": "点击生成 Token",
"alert.integration.token.notice": "此内容只会展示一次,请妥善保管您的 Token,不要泄露给他人",
@@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_2" data-name="图层 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85 75">
<defs>
<style>
.cls-1 {
fill-rule: evenodd;
}
.cls-1, .cls-2 {
fill: #1c2633;
}
.cls-3 {
fill: #00dcff;
}
.cls-4 {
fill: #006aff;
}
</style>
</defs>
<g id="_图层_4" data-name="图层 4">
<g>
<g>
<path class="cls-3" d="M34.82,28.93l-14.97,46.07h32.16l-14.97-46.07c-.35-1.08-1.88-1.08-2.23,0Z"/>
<path class="cls-3" d="M12.83,42.36c-.35-1.08-1.88-1.08-2.23,0L0,75h9.42l7.01-21.57-3.59-11.06Z"/>
<path class="cls-4" d="M29.52,20c-.35-1.08-1.88-1.08-2.23,0l-17.87,55h10.43l13.77-42.37-4.1-12.63Z"/>
<path class="cls-3" d="M71.73,36.43c-.35-1.08-1.88-1.08-2.23,0l-3.55,10.94,8.98,27.63h9.34l-12.53-38.57Z"/>
<path class="cls-4" d="M50.82.81c-.35-1.08-1.88-1.08-2.23,0l-10.34,31.82,13.77,42.37h22.9L50.82.81Z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB