| # 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. |
| |
| rules: |
| - name: envoy-als |
| layer: MESH |
| dsl: | |
| filter { |
| // only collect abnormal logs (http status code >= 300, or commonProperties?.responseFlags is not empty) |
| if (parsed?.response?.responseCode?.value as Integer < 400 && !parsed?.commonProperties?.responseFlags?.toString()?.trim()) { |
| abort {} |
| } |
| extractor { |
| if (parsed?.response?.responseCode) { |
| tag 'status.code': parsed?.response?.responseCode?.value |
| } |
| tag 'response.flag': parsed?.commonProperties?.responseFlags |
| } |
| sink { |
| sampler { |
| if (parsed?.commonProperties?.responseFlags?.toString()) { |
| // use service:errorCode as sampler id so that each service:errorCode has its own sampler, |
| // e.g. checkoutservice:[upstreamConnectionFailure], checkoutservice:[upstreamRetryLimitExceeded] |
| rateLimit("${log.service}:${parsed?.commonProperties?.responseFlags?.toString()}") { |
| rpm 6000 |
| } |
| } else { |
| // use service:responseCode as sampler id so that each service:responseCode has its own sampler, |
| // e.g. checkoutservice:500, checkoutservice:404. |
| rateLimit("${log.service}:${parsed?.response?.responseCode}") { |
| rpm 6000 |
| } |
| } |
| } |
| } |
| } |
| - name: network-profiling-slow-trace |
| layer: MESH |
| dsl: | |
| filter { |
| json{ |
| } |
| extractor{ |
| if (tag("LOG_KIND") == "NET_PROFILING_SAMPLED_TRACE") { |
| sampledTrace { |
| latency parsed.latency as Long |
| uri parsed.uri as String |
| reason parsed.reason as String |
| |
| if (parsed.client_process.process_id as String != "") { |
| processId parsed.client_process.process_id as String |
| } else if (parsed.client_process.local as Boolean) { |
| processId ProcessRegistry.generateVirtualLocalProcess(parsed.service as String, parsed.serviceInstance as String) as String |
| } else { |
| processId ProcessRegistry.generateVirtualRemoteProcess(parsed.service as String, parsed.serviceInstance as String, parsed.client_process.address as String) as String |
| } |
| |
| if (parsed.server_process.process_id as String != "") { |
| destProcessId parsed.server_process.process_id as String |
| } else if (parsed.server_process.local as Boolean) { |
| destProcessId ProcessRegistry.generateVirtualLocalProcess(parsed.service as String, parsed.serviceInstance as String) as String |
| } else { |
| destProcessId ProcessRegistry.generateVirtualRemoteProcess(parsed.service as String, parsed.serviceInstance as String, parsed.server_process.address as String) as String |
| } |
| |
| detectPoint parsed.detect_point as String |
| |
| if (parsed.component as String == "http" && parsed.ssl as Boolean) { |
| componentId 129 |
| } else if (parsed.component as String == "http") { |
| componentId 49 |
| } else if (parsed.ssl as Boolean) { |
| componentId 130 |
| } else { |
| componentId 110 |
| } |
| } |
| } |
| } |
| } |