Search in sources :

Example 1 with OndemandLogQueryCondition

use of org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition in project incubator-skywalking by apache.

the class OndemandLogQuery method filter.

private List<Log> filter(final OndemandLogQueryCondition request, final List<InternalLog> logs) {
    final Duration duration = new Duration();
    duration.setStart(request.getDuration().getStart());
    duration.setEnd(request.getDuration().getEnd());
    duration.setStep(request.getDuration().getStep());
    final long since = duration.getStartTimestamp() / 1000;
    final long to = duration.getEndTimestamp() / 1000;
    final List<String> inclusions = request.getKeywordsOfContent();
    final Predicate<Log> inclusivePredicate = l -> inclusions.isEmpty() || inclusions.stream().anyMatch(k -> l.getContent().matches(k));
    final List<String> exclusions = request.getExcludingKeywordsOfContent();
    final Predicate<Log> exclusivePredicate = l -> exclusions.isEmpty() || exclusions.stream().noneMatch(k -> l.getContent().matches(k));
    return logs.stream().map(LogAdapter::new).map(LogAdapter::adapt).filter(inclusivePredicate).filter(exclusivePredicate).filter(it -> it.getTimestamp() >= since).filter(it -> it.getTimestamp() <= to).sorted(comparing(Log::getTimestamp)).collect(Collectors.toList());
}
Also used : RequiredArgsConstructor(lombok.RequiredArgsConstructor) TypeToken(com.google.common.reflect.TypeToken) PropertyUtil(org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic.PropertyUtil) Duration(org.apache.skywalking.oap.server.core.query.input.Duration) Strings(com.google.common.base.Strings) ApiException(io.kubernetes.client.openapi.ApiException) Configuration(io.kubernetes.client.openapi.Configuration) Gson(com.google.gson.Gson) Map(java.util.Map) OndemandLogQueryCondition(org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition) V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) Attribute(org.apache.skywalking.oap.server.core.query.type.Attribute) Objects.isNull(java.util.Objects.isNull) Comparator.comparing(java.util.Comparator.comparing) StringUtil(org.apache.skywalking.oap.server.library.util.StringUtil) V1Container(io.kubernetes.client.openapi.models.V1Container) Splitter(com.google.common.base.Splitter) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) OndemandContainergQueryCondition(org.apache.skywalking.oap.query.graphql.type.OndemandContainergQueryCondition) Log(org.apache.skywalking.oap.server.core.query.type.Log) ServiceInstance(org.apache.skywalking.oap.server.core.query.type.ServiceInstance) IOException(java.io.IOException) CoreV1Api(io.kubernetes.client.openapi.apis.CoreV1Api) Collectors(java.util.stream.Collectors) GraphQLQueryResolver(graphql.kickstart.tools.GraphQLQueryResolver) Config(io.kubernetes.client.util.Config) LogAdapter(org.apache.skywalking.oap.query.graphql.type.LogAdapter) V1PodSpec(io.kubernetes.client.openapi.models.V1PodSpec) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) Type(java.lang.reflect.Type) Predicate(com.google.common.base.Predicate) Logs(org.apache.skywalking.oap.server.core.query.type.Logs) Objects.nonNull(java.util.Objects.nonNull) Collections(java.util.Collections) V1Pod(io.kubernetes.client.openapi.models.V1Pod) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) Log(org.apache.skywalking.oap.server.core.query.type.Log) Duration(org.apache.skywalking.oap.server.core.query.input.Duration) LogAdapter(org.apache.skywalking.oap.query.graphql.type.LogAdapter)

Example 2 with OndemandLogQueryCondition

use of org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition in project skywalking by apache.

the class OndemandLogQuery method filter.

private List<Log> filter(final OndemandLogQueryCondition request, final List<InternalLog> logs) {
    final Duration duration = new Duration();
    duration.setStart(request.getDuration().getStart());
    duration.setEnd(request.getDuration().getEnd());
    duration.setStep(request.getDuration().getStep());
    final long since = duration.getStartTimestamp() / 1000;
    final long to = duration.getEndTimestamp() / 1000;
    final List<String> inclusions = request.getKeywordsOfContent();
    final Predicate<Log> inclusivePredicate = l -> inclusions.isEmpty() || inclusions.stream().anyMatch(k -> l.getContent().matches(k));
    final List<String> exclusions = request.getExcludingKeywordsOfContent();
    final Predicate<Log> exclusivePredicate = l -> exclusions.isEmpty() || exclusions.stream().noneMatch(k -> l.getContent().matches(k));
    return logs.stream().map(LogAdapter::new).map(LogAdapter::adapt).filter(inclusivePredicate).filter(exclusivePredicate).filter(it -> it.getTimestamp() >= since).filter(it -> it.getTimestamp() <= to).sorted(comparing(Log::getTimestamp)).collect(Collectors.toList());
}
Also used : RequiredArgsConstructor(lombok.RequiredArgsConstructor) TypeToken(com.google.common.reflect.TypeToken) PropertyUtil(org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic.PropertyUtil) Duration(org.apache.skywalking.oap.server.core.query.input.Duration) Strings(com.google.common.base.Strings) ApiException(io.kubernetes.client.openapi.ApiException) Configuration(io.kubernetes.client.openapi.Configuration) Gson(com.google.gson.Gson) Map(java.util.Map) OndemandLogQueryCondition(org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition) V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) Attribute(org.apache.skywalking.oap.server.core.query.type.Attribute) Objects.isNull(java.util.Objects.isNull) Comparator.comparing(java.util.Comparator.comparing) StringUtil(org.apache.skywalking.oap.server.library.util.StringUtil) V1Container(io.kubernetes.client.openapi.models.V1Container) Splitter(com.google.common.base.Splitter) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) OndemandContainergQueryCondition(org.apache.skywalking.oap.query.graphql.type.OndemandContainergQueryCondition) Log(org.apache.skywalking.oap.server.core.query.type.Log) ServiceInstance(org.apache.skywalking.oap.server.core.query.type.ServiceInstance) IOException(java.io.IOException) CoreV1Api(io.kubernetes.client.openapi.apis.CoreV1Api) Collectors(java.util.stream.Collectors) GraphQLQueryResolver(graphql.kickstart.tools.GraphQLQueryResolver) Config(io.kubernetes.client.util.Config) LogAdapter(org.apache.skywalking.oap.query.graphql.type.LogAdapter) V1PodSpec(io.kubernetes.client.openapi.models.V1PodSpec) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) Type(java.lang.reflect.Type) Predicate(com.google.common.base.Predicate) PodContainers(org.apache.skywalking.oap.query.graphql.type.PodContainers) Logs(org.apache.skywalking.oap.server.core.query.type.Logs) Objects.nonNull(java.util.Objects.nonNull) Collections(java.util.Collections) V1Pod(io.kubernetes.client.openapi.models.V1Pod) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) Log(org.apache.skywalking.oap.server.core.query.type.Log) Duration(org.apache.skywalking.oap.server.core.query.input.Duration) LogAdapter(org.apache.skywalking.oap.query.graphql.type.LogAdapter)

Example 3 with OndemandLogQueryCondition

use of org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition in project skywalking by apache.

the class OndemandLogQuery method ondemandPodLogs.

public Logs ondemandPodLogs(final String namespace, final String podName, final OndemandLogQueryCondition condition) throws IOException {
    if (Strings.isNullOrEmpty(namespace) || Strings.isNullOrEmpty(podName)) {
        return new Logs().setErrorReason("namespace and podName can't be null or empty");
    }
    try {
        final V1Pod pod = kApi().readNamespacedPod(podName, namespace, null);
        final V1ObjectMeta podMetadata = pod.getMetadata();
        if (isNull(podMetadata)) {
            return new Logs().setErrorReason("No pod metadata can be found");
        }
        final V1PodSpec spec = pod.getSpec();
        if (isNull(spec)) {
            return new Logs().setErrorReason("No pod spec can be found");
        }
        final Duration duration = new Duration();
        duration.setStart(condition.getDuration().getStart());
        duration.setEnd(condition.getDuration().getEnd());
        duration.setStep(condition.getDuration().getStep());
        final long since = duration.getStartTimestamp() / 1000;
        final String container = condition.getContainer();
        final String podLog = kApi().readNamespacedPodLog(podMetadata.getName(), podMetadata.getNamespace(), container, false, null, null, null, null, (int) since, null, true);
        final List<InternalLog> logs = Splitter.on("\n").omitEmptyStrings().splitToList(Strings.nullToEmpty(podLog)).stream().filter(StringUtil::isNotBlank).map(it -> InternalLog.builder().line(it).container(container).build()).collect(Collectors.toList());
        final List<Log> filtered = filter(condition, logs);
        final List<Log> limited = filtered.stream().limit(10000).collect(Collectors.toList());
        final Logs result = new Logs();
        result.getLogs().addAll(limited);
        return result;
    } catch (ApiException e) {
        log.error("Failed to fetch logs from Kubernetes, {}", e.getResponseBody(), e);
        if (!Strings.isNullOrEmpty(e.getResponseBody())) {
            Map<String, Object> responseBody = gson.fromJson(e.getResponseBody(), responseType);
            String message = responseBody.getOrDefault("message", e.getCode()).toString();
            return new Logs().setErrorReason(message);
        }
        return new Logs().setErrorReason(e.getMessage() + ": " + e.getCode());
    }
}
Also used : RequiredArgsConstructor(lombok.RequiredArgsConstructor) TypeToken(com.google.common.reflect.TypeToken) PropertyUtil(org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic.PropertyUtil) Duration(org.apache.skywalking.oap.server.core.query.input.Duration) Strings(com.google.common.base.Strings) ApiException(io.kubernetes.client.openapi.ApiException) Configuration(io.kubernetes.client.openapi.Configuration) Gson(com.google.gson.Gson) Map(java.util.Map) OndemandLogQueryCondition(org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition) V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) Attribute(org.apache.skywalking.oap.server.core.query.type.Attribute) Objects.isNull(java.util.Objects.isNull) Comparator.comparing(java.util.Comparator.comparing) StringUtil(org.apache.skywalking.oap.server.library.util.StringUtil) V1Container(io.kubernetes.client.openapi.models.V1Container) Splitter(com.google.common.base.Splitter) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) OndemandContainergQueryCondition(org.apache.skywalking.oap.query.graphql.type.OndemandContainergQueryCondition) Log(org.apache.skywalking.oap.server.core.query.type.Log) ServiceInstance(org.apache.skywalking.oap.server.core.query.type.ServiceInstance) IOException(java.io.IOException) CoreV1Api(io.kubernetes.client.openapi.apis.CoreV1Api) Collectors(java.util.stream.Collectors) GraphQLQueryResolver(graphql.kickstart.tools.GraphQLQueryResolver) Config(io.kubernetes.client.util.Config) LogAdapter(org.apache.skywalking.oap.query.graphql.type.LogAdapter) V1PodSpec(io.kubernetes.client.openapi.models.V1PodSpec) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) Type(java.lang.reflect.Type) Predicate(com.google.common.base.Predicate) PodContainers(org.apache.skywalking.oap.query.graphql.type.PodContainers) Logs(org.apache.skywalking.oap.server.core.query.type.Logs) Objects.nonNull(java.util.Objects.nonNull) Collections(java.util.Collections) V1Pod(io.kubernetes.client.openapi.models.V1Pod) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) Log(org.apache.skywalking.oap.server.core.query.type.Log) V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) Duration(org.apache.skywalking.oap.server.core.query.input.Duration) Logs(org.apache.skywalking.oap.server.core.query.type.Logs) V1Pod(io.kubernetes.client.openapi.models.V1Pod) StringUtil(org.apache.skywalking.oap.server.library.util.StringUtil) Map(java.util.Map) V1PodSpec(io.kubernetes.client.openapi.models.V1PodSpec) ApiException(io.kubernetes.client.openapi.ApiException)

Example 4 with OndemandLogQueryCondition

use of org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition in project incubator-skywalking by apache.

the class OndemandLogQuery method ondemandPodLogs.

public Logs ondemandPodLogs(final String namespace, final String podName, final OndemandLogQueryCondition condition) throws IOException {
    try {
        final V1Pod pod = kApi().readNamespacedPod(podName, namespace, null);
        final V1ObjectMeta podMetadata = pod.getMetadata();
        if (isNull(podMetadata)) {
            return new Logs();
        }
        final V1PodSpec spec = pod.getSpec();
        if (isNull(spec)) {
            return new Logs();
        }
        final Duration duration = new Duration();
        duration.setStart(condition.getDuration().getStart());
        duration.setEnd(condition.getDuration().getEnd());
        duration.setStep(condition.getDuration().getStep());
        final long since = duration.getStartTimestamp() / 1000;
        final String container = condition.getContainer();
        final String podLog = kApi().readNamespacedPodLog(podMetadata.getName(), podMetadata.getNamespace(), container, false, null, null, null, null, (int) since, null, true);
        final List<InternalLog> logs = Splitter.on("\n").omitEmptyStrings().splitToList(Strings.nullToEmpty(podLog)).stream().filter(StringUtil::isNotBlank).map(it -> InternalLog.builder().line(it).container(container).build()).collect(Collectors.toList());
        final List<Log> filtered = filter(condition, logs);
        final List<Log> limited = filtered.stream().limit(10000).collect(Collectors.toList());
        final Logs result = new Logs();
        result.getLogs().addAll(limited);
        return result;
    } catch (ApiException e) {
        log.error("Failed to fetch logs from Kubernetes, {}", e.getResponseBody(), e);
        Map<String, Object> responseBody = gson.fromJson(e.getResponseBody(), responseType);
        String message = responseBody.getOrDefault("message", e.getCode()).toString();
        throw new RuntimeException(message);
    }
}
Also used : RequiredArgsConstructor(lombok.RequiredArgsConstructor) TypeToken(com.google.common.reflect.TypeToken) PropertyUtil(org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic.PropertyUtil) Duration(org.apache.skywalking.oap.server.core.query.input.Duration) Strings(com.google.common.base.Strings) ApiException(io.kubernetes.client.openapi.ApiException) Configuration(io.kubernetes.client.openapi.Configuration) Gson(com.google.gson.Gson) Map(java.util.Map) OndemandLogQueryCondition(org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition) V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) Attribute(org.apache.skywalking.oap.server.core.query.type.Attribute) Objects.isNull(java.util.Objects.isNull) Comparator.comparing(java.util.Comparator.comparing) StringUtil(org.apache.skywalking.oap.server.library.util.StringUtil) V1Container(io.kubernetes.client.openapi.models.V1Container) Splitter(com.google.common.base.Splitter) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) OndemandContainergQueryCondition(org.apache.skywalking.oap.query.graphql.type.OndemandContainergQueryCondition) Log(org.apache.skywalking.oap.server.core.query.type.Log) ServiceInstance(org.apache.skywalking.oap.server.core.query.type.ServiceInstance) IOException(java.io.IOException) CoreV1Api(io.kubernetes.client.openapi.apis.CoreV1Api) Collectors(java.util.stream.Collectors) GraphQLQueryResolver(graphql.kickstart.tools.GraphQLQueryResolver) Config(io.kubernetes.client.util.Config) LogAdapter(org.apache.skywalking.oap.query.graphql.type.LogAdapter) V1PodSpec(io.kubernetes.client.openapi.models.V1PodSpec) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) Type(java.lang.reflect.Type) Predicate(com.google.common.base.Predicate) Logs(org.apache.skywalking.oap.server.core.query.type.Logs) Objects.nonNull(java.util.Objects.nonNull) Collections(java.util.Collections) V1Pod(io.kubernetes.client.openapi.models.V1Pod) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) InternalLog(org.apache.skywalking.oap.query.graphql.type.InternalLog) Log(org.apache.skywalking.oap.server.core.query.type.Log) V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) Duration(org.apache.skywalking.oap.server.core.query.input.Duration) Logs(org.apache.skywalking.oap.server.core.query.type.Logs) V1Pod(io.kubernetes.client.openapi.models.V1Pod) StringUtil(org.apache.skywalking.oap.server.library.util.StringUtil) Map(java.util.Map) V1PodSpec(io.kubernetes.client.openapi.models.V1PodSpec) ApiException(io.kubernetes.client.openapi.ApiException)

Aggregations

Predicate (com.google.common.base.Predicate)4 Splitter (com.google.common.base.Splitter)4 Strings (com.google.common.base.Strings)4 TypeToken (com.google.common.reflect.TypeToken)4 Gson (com.google.gson.Gson)4 GraphQLQueryResolver (graphql.kickstart.tools.GraphQLQueryResolver)4 ApiException (io.kubernetes.client.openapi.ApiException)4 Configuration (io.kubernetes.client.openapi.Configuration)4 CoreV1Api (io.kubernetes.client.openapi.apis.CoreV1Api)4 V1Container (io.kubernetes.client.openapi.models.V1Container)4 V1ObjectMeta (io.kubernetes.client.openapi.models.V1ObjectMeta)4 V1Pod (io.kubernetes.client.openapi.models.V1Pod)4 V1PodSpec (io.kubernetes.client.openapi.models.V1PodSpec)4 Config (io.kubernetes.client.util.Config)4 IOException (java.io.IOException)4 Type (java.lang.reflect.Type)4 Collections (java.util.Collections)4 Comparator.comparing (java.util.Comparator.comparing)4 List (java.util.List)4 Map (java.util.Map)4