List available mixer adapters

#1

Hi there,

Is there a way to list the available mixer adapters (built-in and/or out-of-process)?

The reason I ask is because I’m trying to use the dogstatsd adapter and:

  • When I installed istio (from https://gcsweb.istio.io/gcs/istio-prerelease/daily-build/1.1.0-snapshot.4/charts) the dogstatsd.config.istio.io CRD didn’t exist. I installed it from the crd-11.yaml available in the istio github repo

  • I previously set up a statsd adapter that works as expected, however the metrics don’t include tags, hence my move to dogstatsd

  • With that installed, when I created my handler metrics I get absolutely nothing. No errors in the mixer log, no metrics in the istio-telemetry:9093 endpoint (I do see the mixer_runtime_dispatch_duration_seconds_bucket with the adapter=“prometheus” and adapter=“statsd” )

So I’m thinking that maybe the dogstatsd adapter hasn’t been compiled in my version of mixer? If so, is there a guide I can follow to run it out-of-process?

Cheers

#2

It’s probably worth mentioning that istio-telemetry is using the istio/mixer:1.1.0-snapshot.4 image from dockerhub

#3

To answer my own question, the problem was that the sampleRate parameter in the dogstatsd handler is not optional. Adding it fixed my issue.

#4

@Lethalpaga_Jones Are you able to share what you did to get the dogstatsd handler configured?

#5

Sure, this is the handler config. As you can tell by the name we send it to gostatsd (and then to newrelic) instead of the datadog agent, it works beautifully with istio-1.1.0-snapshot.5. It didn’t work with snapshot.4, and I haven’t tried on other versions.

apiVersion: config.istio.io/v1alpha2
kind: dogstatsd
metadata:
  name: newrelic
  namespace: istio-system
spec:
  address: gostatsd.istio-system.svc.cluster.local:8125
  global_tags:
    cluster: test
  metrics:
    requestcount.metric.istio-system:
      name: requests_total
      type: COUNTER
    requestduration.metric.istio-system:
      name: request_duration_seconds
      type: DISTRIBUTION
    requestsize.metric.istio-system:
      name: request_bytes
      type: DISTRIBUTION
    responsesize.metric.istio-system:
      name: response_bytes
      type: DISTRIBUTION
    tcpbytereceived.metric.istio-system:
      name: tcp_received_bytes_total
      type: COUNTER
    tcpbytesent.metric.istio-system:
      name: tcp_sent_bytes_total
      type: COUNTER
    tcpconnectionsclosed.metric.istio-system:
      name: tcp_connections_closed_total
      type: COUNTER
    tcpconnectionsopened.metric.istio-system:
      name: tcp_connections_opened_total
      type: COUNTER
  sample_rate: 0.01
#6

And here’s the rules config:

apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
  name: newrelichttp
  namespace: istio-system
spec:
  match: context.protocol == "http" || context.protocol == "grpc"
  actions:
    - handler: newrelic.dogstatsd
      instances:
        - requestcount.metric.istio-system
        - requestduration.metric
        - requestsize.metric.istio-system
        - responsesize.metric.istio-system

---

apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
  name: newrelictcp
  namespace: istio-system
spec:
  match: context.protocol == "tcp"
  actions:
    - handler: newrelic.dogstatsd
      instances:
        - tcpbytesent.metric
        - tcpbytereceived.metric