Skip to content

Commit

Permalink
test: extract so11y test and add logs (#5955)
Browse files Browse the repository at this point in the history
* Increase metrics time range
* Remove unused codes
* Update SO11yE2E.java

Co-authored-by: Hongtao Gao <hanahmily@gmail.com>
  • Loading branch information
kezhenxu94 and hanahmily committed Dec 6, 2020
1 parent c24dbd6 commit b5367aa
Show file tree
Hide file tree
Showing 8 changed files with 239 additions and 9 deletions.
61 changes: 61 additions & 0 deletions .github/workflows/e2e.so11y.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# 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.

name: E2E

on:
pull_request:
paths:
- '**'
- '!**.md'
push:
branches:
- master

env:
SKIP_TEST: true
SW_AGENT_JDK_VERSION: 8
CODECOV_TOKEN: d2065307-8f01-4637-9715-2781ef096db7

jobs:
SelfObservability:
name: SelfObservability
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Cache local Maven repository
uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Compile and Build
run: make docker
- name: Copy dist package
run: cp -R dist test/e2e/
- name: ${{ matrix.case }}
run: ./mvnw --batch-mode -f test/e2e/pom.xml -am -DfailIfNoTests=false verify -Dit.test=org.apache.skywalking.e2e.SO11yE2E
- name: Report Coverage
run: bash -x tools/coverage/report.sh
- uses: actions/upload-artifact@v1
if: failure()
with:
name: logs
path: logs
2 changes: 2 additions & 0 deletions docker/oap/log4j2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@
<logger name="org.apache.zookeeper" level="INFO"/>
<logger name="org.elasticsearch.common.network.IfConfig" level="INFO"/>
<logger name="io.grpc.netty" level="INFO"/>
<logger name="org.apache.skywalking.oap.meter.analyzer" level="DEBUG"/>
<logger name="org.apache.skywalking.oap.server.receiver.istio.telemetry" level="DEBUG"/>
<logger name="org.apache.skywalking.oap.server.fetcher.prometheus" level="DEBUG"/>
<logger name="org.apache.skywalking.oap.server.receiver.envoy.als" level="DEBUG"/>
<Root level="INFO">
<AppenderRef ref="Console"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,16 @@ metricsRules:
- name: instance_mesh_analysis_error_count
exp: mesh_analysis_error_count.sum(['service', 'instance']).increase('PT1M')
- name: instance_metrics_first_aggregation
exp: metrics_aggregation.tagEqual('dimensionality', 'minute', 'level', '1').sum(['service', 'instance']).increase('PT1M')
exp: metrics_aggregation.tagEqual('dimensionality', 'minute', 'level', '1').sum(['service', 'instance']).increase('PT5M')
- name: instance_metrics_second_aggregation
exp: metrics_aggregation.tagEqual('dimensionality', 'minute', 'level', '2').sum(['service', 'instance']).increase('PT1M')
exp: metrics_aggregation.tagEqual('dimensionality', 'minute', 'level', '2').sum(['service', 'instance']).increase('PT5M')
- name: instance_persistence_execute_percentile
exp: persistence_timer_bulk_execute_latency.sum(['le', 'service', 'instance']).increase('PT5M').histogram().histogram_percentile([50,70,90,99])
- name: instance_persistence_prepare_percentile
exp: persistence_timer_bulk_prepare_latency.sum(['le', 'service', 'instance']).increase('PT5M').histogram().histogram_percentile([50,70,90,99])
- name: instance_persistence_error_count
exp: persistence_timer_bulk_error_count.sum(['service', 'instance']).increase('PT1M')
exp: persistence_timer_bulk_error_count.sum(['service', 'instance']).increase('PT5M')
- name: instance_persistence_execute_count
exp: persistence_timer_bulk_execute_latency_count.sum(['service', 'instance']).increase('PT1M')
exp: persistence_timer_bulk_execute_latency_count.sum(['service', 'instance']).increase('PT5M')
- name: instance_persistence_prepare_count
exp: persistence_timer_bulk_prepare_latency_count.sum(['service', 'instance']).increase('PT1M')
exp: persistence_timer_bulk_prepare_latency_count.sum(['service', 'instance']).increase('PT5M')
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ public void notifyAfterCompleted() throws ServiceNotProvidedException, ModuleSta
result.addAll(mf.getMetrics());
}
}
if (log.isDebugEnabled()) {
log.debug("Fetch metrics from prometheus: {}", result);
}
return result;
}))
.flatMap(tryIt -> MetricConvert.log(tryIt, "Load metric"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ public class MetricsQuery extends AbstractQuery<MetricsQuery> {
public static String[] ALL_SO11Y_LINER_METRICS = {
METER_INSTANCE_CPU_PERCENTAGE,
METER_INSTANCE_JVM_MEMORY_BYTES_USED,
METER_INSTANCE_TRACE_COUNT,
METER_INSTANCE_METRICS_FIRST_AGGREGATION,
METER_INSTANCE_PERSISTENCE_PREPARE_COUNT,
METER_INSTANCE_PERSISTENCE_EXECUTE_COUNT
Expand Down
36 changes: 36 additions & 0 deletions test/e2e/e2e-test/docker/simple/so11y/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 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.

version: '2.1'

services:
oap:
environment:
SW_PROMETHEUS_FETCHER: "default"
SW_TELEMETRY: prometheus
extends:
file: ../../base-compose.yml
service: oap

ui:
extends:
file: ../../base-compose.yml
service: ui
depends_on:
oap:
condition: service_healthy

networks:
e2e:
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
/*
* 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.skywalking.e2e;

import java.util.List;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.e2e.annotation.ContainerHostAndPort;
import org.apache.skywalking.e2e.annotation.DockerCompose;
import org.apache.skywalking.e2e.base.SkyWalkingE2E;
import org.apache.skywalking.e2e.base.SkyWalkingTestAdapter;
import org.apache.skywalking.e2e.common.HostAndPort;
import org.apache.skywalking.e2e.metrics.AtLeastOneOfMetricsMatcher;
import org.apache.skywalking.e2e.metrics.MetricsValueMatcher;
import org.apache.skywalking.e2e.metrics.ReadMetrics;
import org.apache.skywalking.e2e.metrics.ReadMetricsQuery;
import org.apache.skywalking.e2e.retryable.RetryableTest;
import org.apache.skywalking.e2e.service.Service;
import org.apache.skywalking.e2e.service.ServicesMatcher;
import org.apache.skywalking.e2e.service.ServicesQuery;
import org.apache.skywalking.e2e.service.instance.Instance;
import org.apache.skywalking.e2e.service.instance.Instances;
import org.apache.skywalking.e2e.service.instance.InstancesMatcher;
import org.apache.skywalking.e2e.service.instance.InstancesQuery;
import org.junit.jupiter.api.BeforeAll;
import org.testcontainers.containers.DockerComposeContainer;

import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SO11Y_LINER_METRICS;
import static org.apache.skywalking.e2e.utils.Times.now;
import static org.apache.skywalking.e2e.utils.Yamls.load;

/**
* A test case for simple functionality verification
*
* The components are typically:
*
* - an single agent, (provider), generating traffic data
*
* - an OAP node, (oap)
*
* - a webapp, (ui) for querying
*
* The verifications are:
*
* - services
*
* - services metrics
*
* - services relations
*
* - endpoints
*
* - endpoints metrics
*
* - instances
*
* - instance metrics
*
* - topology
*
* - traces
*
* if your case needs the same aforementioned verifications, consider simply provide a docker-compose.yml with the specific orchestration and reuse these codes.
*/
@Slf4j
@SkyWalkingE2E
public class SO11yE2E extends SkyWalkingTestAdapter {
@SuppressWarnings("unused")
@DockerCompose("docker/simple/so11y/docker-compose.yml")
protected DockerComposeContainer<?> justForSideEffects;

@SuppressWarnings("unused")
@ContainerHostAndPort(name = "ui", port = 8080)
protected HostAndPort swWebappHostPort;

@BeforeAll
void setUp() {
queryClient(swWebappHostPort);
}

@RetryableTest
void so11y() throws Exception {
List<Service> services = graphql.services(new ServicesQuery().start(startTime).end(now()));

services = services.stream().filter(s -> s.getLabel().equals("oap::oap-server")).collect(Collectors.toList());
LOGGER.info("services: {}", services);
load("expected/simple/so11y-services.yml").as(ServicesMatcher.class).verify(services);
for (final Service service : services) {
final Instances instances = graphql.instances(
new InstancesQuery().serviceId(service.getKey()).start(startTime).end(now())
);

LOGGER.info("instances: {}", instances);

load("expected/simple/so11y-instances.yml").as(InstancesMatcher.class).verify(instances);
for (Instance instance : instances.getInstances()) {
for (String metricsName : ALL_SO11Y_LINER_METRICS) {
LOGGER.info("verifying service instance response time: {}", instance);
final ReadMetrics instanceMetrics = graphql.readMetrics(
new ReadMetricsQuery().stepByMinute().metricsName(metricsName)
.serviceName(service.getLabel()).instanceName(instance.getLabel())
);

LOGGER.info("{}: {}", metricsName, instanceMetrics);
final AtLeastOneOfMetricsMatcher instanceRespTimeMatcher = new AtLeastOneOfMetricsMatcher();
final MetricsValueMatcher greaterThanZero = new MetricsValueMatcher();
greaterThanZero.setValue("gt 0");
instanceRespTimeMatcher.setValue(greaterThanZero);
instanceRespTimeMatcher.verify(instanceMetrics.getValues());
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

package org.apache.skywalking.e2e.simple;

import java.util.List;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.e2e.annotation.ContainerHostAndPort;
import org.apache.skywalking.e2e.annotation.DockerCompose;
Expand Down Expand Up @@ -54,9 +56,6 @@
import org.junit.jupiter.api.BeforeAll;
import org.testcontainers.containers.DockerComposeContainer;

import java.util.List;
import java.util.stream.Collectors;

import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics;
import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
Expand Down

0 comments on commit b5367aa

Please sign in to comment.