Merge pull request #1 from Relyance/apm_integration

Integrate datadog APM integration for the online boutique app
This commit is contained in:
Abhi Sharma 2020-08-31 20:37:01 -07:00 committed by GitHub
commit 8c6da2c0d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
30 changed files with 1764 additions and 334 deletions

30
apm/datadog/README.md Normal file
View file

@ -0,0 +1,30 @@
## Steps to setup Online Boutique App with Datadog monitoring
### Steps to install the boutique app on local machine with Kubernetes enabled on docker-desktop
1. Clone the source code for the online boutique app
$ git clone git@github.com:Relyance/microservices-demo.git
2. Once the source code is cloned, enter the folder containing the source code
$ cd microservices-demo/release
3. Run the kubernetes apply command to run the online boutique app
$ kubectl apply -f kubernetes-manifests.yaml
(Note: Wait for 10 minutes for the whole app to be downloaded and up and running
4. Do the port-forwarding to run the application from the browser
$ kubectl port-forward service/frontend 8080:80
### Steps to setup Datadog agent for monitoring Online Boutique App (deployed as Kubernetes) [Explained above]
1. Configure agent permissions
$ kubectl apply -f "https://raw.githubusercontent.com/DataDog/datadog-agent/master/Dockerfiles/manifests/rbac/clusterrole.yaml"
$ kubectl apply -f "https://raw.githubusercontent.com/DataDog/datadog-agent/master/Dockerfiles/manifests/rbac/serviceaccount.yaml"
$ kubectl apply -f "https://raw.githubusercontent.com/DataDog/datadog-agent/master/Dockerfiles/manifests/rbac/clusterrolebinding.yaml"
2. Create a secret that contains your Datadog API Key
$ kubectl create secret generic datadog-agent --from-literal api-key="77ed0972ca94340f9db3fb78ee5e89cc" --namespace="default"
1. Enable the datadog agent manifest file
$ kubectl apply -f datadog-agent-logs-apm.yaml

View file

@ -0,0 +1,283 @@
# Source: datadog/templates/secrets.yaml
# api-key: YzMyZGZiN2FhZTAzYTUxMTczN2NlNDQ3NDdmMTEwNTIK # key for rahul.jagad@relyance.ai account
# API Key
apiVersion: v1
kind: Secret
metadata:
name: datadog-agent
labels: {}
type: Opaque
data:
api-key: NzdlZDA5NzJjYTk0MzQwZjlkYjNmYjc4ZWU1ZTg5Y2MK
---
# Source: datadog/templates/daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: datadog-agent
labels: {}
spec:
selector:
matchLabels:
app: datadog-agent
template:
metadata:
labels:
app: datadog-agent
name: datadog-agent
annotations: {}
spec:
containers:
- name: agent
image: "datadog/agent:7.21.1"
imagePullPolicy: IfNotPresent
command: ["agent", "run"]
resources: {}
ports:
- containerPort: 8125
name: dogstatsdport
protocol: UDP
env:
- name: DD_CRI_SOCKET_PATH
value: "unix:///host/var/run/docker.sock"
- name: DD_KUBELET_TLS_VERIFY
value: "false"
# To pick the docker logs directly and submit it to the datadog server.
- name: DOCKER_HOST
value: "unix:///host/var/run/docker.sock"
#TODO : API key needs to be used from the "secrets" container above, but
# somehow its not working currently and so putting the secret directly here.
# The problem that i am facing is the "secrets" against is somehow adding the newline
# character to the key making the key invalid and hence not working.
- name: DD_API_KEY
value: "77ed0972ca94340f9db3fb78ee5e89cc"
# valueFrom:
# secretKeyRef:
# name: "datadog-agent"
# key: api-key
- name: DD_KUBERNETES_KUBELET_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: KUBERNETES
value: "yes"
- name: DD_CONTAINER_EXCLUDE
value: "image:datadog/agent"
- name: DD_AC_EXCLUDE
value: "name:datadog-agent"
- name: DD_LOG_LEVEL
value: "INFO"
- name: DD_DOGSTATSD_PORT
value: "8125"
- name: DD_LEADER_ELECTION
value: "true"
- name: DD_COLLECT_KUBERNETES_EVENTS
value: "true"
- name: DD_APM_ENABLED
value: "true"
- name: DD_LOGS_ENABLED
value: "true"
- name: DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL
value: "true"
- name: DD_LOGS_CONFIG_K8S_CONTAINER_USE_FILE
value: "true"
- name: DD_HEALTH_PORT
value: "5555"
volumeMounts:
- name: config
mountPath: /etc/datadog-agent
- name: runtimesocketdir
mountPath: /host/var/run
readOnly: true
- name: procdir
mountPath: /host/proc
readOnly: true
- name: cgroups
mountPath: /host/sys/fs/cgroup
readOnly: true
- name: pointerdir
mountPath: /opt/datadog-agent/run
- name: logpodpath
mountPath: /var/log/pods
readOnly: true
- name: logdockercontainerpath
mountPath: /var/lib/docker/containers
readOnly: true
# - name: dockersocketdir
# mountPath: /host/var/run
livenessProbe:
failureThreshold: 6
httpGet:
path: /live
port: 5555
initialDelaySeconds: 15
periodSeconds: 15
successThreshold: 1
timeoutSeconds: 5
readinessProbe:
failureThreshold: 6
httpGet:
path: /ready
port: 5555
initialDelaySeconds: 15
periodSeconds: 15
successThreshold: 1
timeoutSeconds: 5
- name: trace-agent
image: "datadog/agent:7.21.1"
imagePullPolicy: IfNotPresent
command: ["trace-agent", "-config=/etc/datadog-agent/datadog.yaml"]
resources: {}
ports:
- containerPort: 8126
hostPort: 8126
name: traceport
protocol: TCP
env:
#TODO : API key needs to be used from the "secrets" container above, but
# somehow its not working currently and so putting the secret directly here.
# The problem that i am facing is the "secrets" against is somehow adding the newline
# character to the key making the key invalid and hence not working.
- name: DD_API_KEY
value: "77ed0972ca94340f9db3fb78ee5e89cc"
# valueFrom:
# secretKeyRef:
# name: "datadog-agent"
# key: api-key
- name: DD_KUBERNETES_KUBELET_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: KUBERNETES
value: "yes"
- name: DD_CONTAINER_EXCLUDE
value: "image:datadog/agent"
- name: DOCKER_HOST
value: "unix:///host/var/run/docker.sock"
- name: DD_LOG_LEVEL
value: "debug"
- name: DD_APM_ENABLED
value: "true"
- name: DD_APM_NON_LOCAL_TRAFFIC
value: "true"
- name: DD_APM_RECEIVER_PORT
value: "8126"
volumeMounts:
- name: config
mountPath: /etc/datadog-agent
- name: runtimesocketdir
mountPath: /host/var/run
readOnly: true
livenessProbe:
initialDelaySeconds: 15
periodSeconds: 15
tcpSocket:
port: 8126
timeoutSeconds: 5
initContainers:
- name: init-volume
image: "datadog/agent:7.21.1"
imagePullPolicy: IfNotPresent
command: ["bash", "-c"]
args:
- cp -r /etc/datadog-agent /opt
volumeMounts:
- name: config
mountPath: /opt/datadog-agent
resources: {}
- name: init-config
image: "datadog/agent:7.21.1"
imagePullPolicy: IfNotPresent
command: ["bash", "-c"]
args:
- for script in $(find /etc/cont-init.d/ -type f -name '*.sh' | sort) ; do bash $script ; done
volumeMounts:
- name: config
mountPath: /etc/datadog-agent
- name: procdir
mountPath: /host/proc
readOnly: true
- name: runtimesocketdir
mountPath: /host/var/run
readOnly: true
env:
#TODO : API key needs to be used from the "secrets" container above, but
# somehow its not working currently and so putting the secret directly here.
# The problem that i am facing is the "secrets" against is somehow adding the newline
# character to the key making the key invalid and hence not working.
- name: DD_API_KEY
value: "77ed0972ca94340f9db3fb78ee5e89cc"
- name: DD_KUBERNETES_KUBELET_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: KUBERNETES
value: "yes"
- name: DD_AC_EXCLUDE
value: "name:datadog-agent"
- name: DOCKER_HOST
value: "unix:///host/var/run/docker.sock"
- name: DD_LEADER_ELECTION
value: "true"
resources: {}
volumes:
- name: config
emptyDir: {}
- hostPath:
path: /var/run
name: runtimesocketdir
- hostPath:
path: /proc
name: procdir
- hostPath:
path: /sys/fs/cgroup
name: cgroups
- name: s6-run
emptyDir: {}
- hostPath:
path: "/var/lib/datadog-agent/logs"
name: pointerdir
- hostPath:
path: /var/log/pods
name: logpodpath
- hostPath:
path: /var/lib/docker/containers
name: logdockercontainerpath
- hostPath:
path: /var/run
name: dockersocketdir
tolerations:
affinity: {}
serviceAccountName: "datadog-agent"
nodeSelector:
kubernetes.io/os: linux
updateStrategy:
rollingUpdate:
maxUnavailable: 10%
type: RollingUpdate
# Service
# We probably dont need to expose the datadog agent as the service,
# since the way the "DD_AGENT_HOST" environment variable can be exposed
# inside the application is by setting status.hostIP value.
---
apiVersion: v1
kind: Service
metadata:
name: datadog-agent
spec:
selector:
app: datadog-agent
ports:
- name: agent
protocol: TCP
port: 8125
targetPort: 8125
- name: trace-agent
protocol: TCP
port: 8126
targetPort: 8126
# Source: datadog/templates/containers-common-env.yaml
# The purpose of this template is to define a minimal set of environment
# variables required to operate dedicated containers in the daemonset

View file

@ -51,14 +51,32 @@ spec:
value: "currencyservice:7000"
- name: CART_SERVICE_ADDR
value: "cartservice:7070"
# - name: DISABLE_STATS
# value: "1"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
# - name: JAEGER_SERVICE_ADDR
# value: "jaeger-collector:14268"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
# Enable datadog tracing
- name: DATADOG_APM_ENABLED
value: "true"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_ENV
value: "prod"
- name: DD_SERVICE
value: "checkoutservice"
- name: DD_VERSION
value: "latest"
- name: DD_LOG_LEVEL
value: "debug"
# Disable default opentracing ?
- name: DISABLE_STATS
value: "1"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
# - name: JAEGER_SERVICE_ADDR
# value: "jaeger-collector:14268"
resources:
requests:
cpu: 100m

View file

@ -32,10 +32,22 @@ spec:
ports:
- containerPort: 8080
env:
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DD_ENV
value: "prod"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_SERVICE
value: "emailservice"
- name: DD_VERSION
value: "latest"
- name: PORT
value: "8080"
# - name: DISABLE_TRACING
# value: "1"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
readinessProbe:

View file

@ -67,10 +67,26 @@ spec:
value: "adservice:9555"
- name: ENV_PLATFORM
value: "gcp"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DATADOG_APM_ENABLED
value: "true"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_ENV
value: "prod"
- name: DD_SERVICE
value: "frontend"
- name: DD_VERSION
value: "latest"
- name: DD_LOG_LEVEL
value: "info"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
# - name: JAEGER_SERVICE_ADDR
# value: "jaeger-collector:14268"
resources:

View file

@ -34,12 +34,28 @@ spec:
env:
- name: PORT
value: "3550"
# - name: DISABLE_STATS
# value: "1"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DATADOG_APM_ENABLED
value: "true"
- name: DD_ENV
value: "prod"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_VERSION
value: "latest"
- name: DD_SERVICE
value: "productcatalogservice"
- name: DD_LOG_LEVEL
value: "info"
- name: DISABLE_STATS
value: "1"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
# - name: JAEGER_SERVICE_ADDR
# value: "jaeger-collector:14268"
readinessProbe:

View file

@ -40,16 +40,28 @@ spec:
exec:
command: ["/bin/grpc_health_probe", "-addr=:8080"]
env:
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DD_ENV
value: "prod"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_SERVICE
value: "recommendationservice"
- name: DD_VERSION
value: "latest"
- name: PORT
value: "8080"
- name: PRODUCT_CATALOG_SERVICE_ADDR
value: "productcatalogservice:3550"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
# - name: DISABLE_DEBUGGER
# value: "1"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
- name: DISABLE_DEBUGGER
value: "1"
resources:
requests:
cpu: 100m

View file

@ -16,6 +16,8 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-cart
annotations:
ad.datadoghq.com/redis.logs: '[{"source": "redis", "service": "redis-cart"}]'
spec:
selector:
matchLabels:
@ -28,6 +30,15 @@ spec:
containers:
- name: redis
image: redis:alpine
env:
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DD_ENV
value: prod
- name: DD_SERVICE
value: redis-cart
ports:
- containerPort: 6379
readinessProbe:

View file

@ -33,12 +33,28 @@ spec:
env:
- name: PORT
value: "50051"
# - name: DISABLE_STATS
# value: "1"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DATADOG_APM_ENABLED
value: "true"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_ENV
value: "prod"
- name: DD_SERVICE
value: "shippingservice"
- name: DD_VERSION
value: "latest"
- name: DD_LOG_LEVEL
value: "info"
- name: DISABLE_STATS
value: "1"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
# - name: JAEGER_SERVICE_ADDR
# value: "jaeger-collector:14268"
readinessProbe:

View file

@ -16,6 +16,252 @@
# WARNING: This file is autogenerated. Do not manually edit.
# ----------------------------------------------------------
# Source: datadog/templates/daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: datadog-agent
labels: {}
spec:
selector:
matchLabels:
app: datadog-agent
template:
metadata:
labels:
app: datadog-agent
name: datadog-agent
annotations: {}
spec:
containers:
- name: agent
image: "datadog/agent:7.21.1"
imagePullPolicy: IfNotPresent
command: ["agent", "run"]
resources: {}
ports:
- containerPort: 8125
name: dogstatsdport
protocol: UDP
env:
- name: DD_CRI_SOCKET_PATH
value: "unix:///host/var/run/docker.sock"
- name: DD_KUBELET_TLS_VERIFY
value: "false"
# To pick the docker logs directly and submit it to the datadog server.
- name: DOCKER_HOST
value: "unix:///host/var/run/docker.sock"
#TODO : API key needs to be used from the "secrets" container above, but
# somehow its not working currently and so putting the secret directly here.
# The problem that i am facing is the "secrets" against is somehow adding the newline
# character to the key making the key invalid and hence not working.
- name: DD_API_KEY
value: "77ed0972ca94340f9db3fb78ee5e89cc"
# valueFrom:
# secretKeyRef:
# name: "datadog-agent"
# key: api-key
- name: DD_KUBERNETES_KUBELET_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: KUBERNETES
value: "yes"
- name: DD_CONTAINER_EXCLUDE
value: "image:datadog/agent"
- name: DD_AC_EXCLUDE
value: "name:datadog-agent"
- name: DD_LOG_LEVEL
value: "INFO"
- name: DD_DOGSTATSD_PORT
value: "8125"
- name: DD_LEADER_ELECTION
value: "true"
- name: DD_COLLECT_KUBERNETES_EVENTS
value: "true"
- name: DD_APM_ENABLED
value: "true"
- name: DD_LOGS_ENABLED
value: "true"
- name: DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL
value: "true"
- name: DD_LOGS_CONFIG_K8S_CONTAINER_USE_FILE
value: "true"
- name: DD_HEALTH_PORT
value: "5555"
volumeMounts:
- name: config
mountPath: /etc/datadog-agent
- name: runtimesocketdir
mountPath: /host/var/run
readOnly: true
- name: procdir
mountPath: /host/proc
readOnly: true
- name: cgroups
mountPath: /host/sys/fs/cgroup
readOnly: true
- name: pointerdir
mountPath: /opt/datadog-agent/run
- name: logpodpath
mountPath: /var/log/pods
readOnly: true
- name: logdockercontainerpath
mountPath: /var/lib/docker/containers
readOnly: true
# - name: dockersocketdir
# mountPath: /host/var/run
livenessProbe:
failureThreshold: 6
httpGet:
path: /live
port: 5555
initialDelaySeconds: 15
periodSeconds: 15
successThreshold: 1
timeoutSeconds: 5
readinessProbe:
failureThreshold: 6
httpGet:
path: /ready
port: 5555
initialDelaySeconds: 15
periodSeconds: 15
successThreshold: 1
timeoutSeconds: 5
- name: trace-agent
image: "datadog/agent:7.21.1"
imagePullPolicy: IfNotPresent
command: ["trace-agent", "-config=/etc/datadog-agent/datadog.yaml"]
resources: {}
ports:
- containerPort: 8126
hostPort: 8126
name: traceport
protocol: TCP
env:
#TODO : API key needs to be used from the "secrets" container above, but
# somehow its not working currently and so putting the secret directly here.
# The problem that i am facing is the "secrets" against is somehow adding the newline
# character to the key making the key invalid and hence not working.
- name: DD_API_KEY
value: "77ed0972ca94340f9db3fb78ee5e89cc"
# valueFrom:
# secretKeyRef:
# name: "datadog-agent"
# key: api-key
- name: DD_KUBERNETES_KUBELET_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: KUBERNETES
value: "yes"
- name: DD_CONTAINER_EXCLUDE
value: "image:datadog/agent"
- name: DOCKER_HOST
value: "unix:///host/var/run/docker.sock"
- name: DD_LOG_LEVEL
value: "debug"
- name: DD_APM_ENABLED
value: "true"
- name: DD_APM_NON_LOCAL_TRAFFIC
value: "true"
- name: DD_APM_RECEIVER_PORT
value: "8126"
volumeMounts:
- name: config
mountPath: /etc/datadog-agent
- name: runtimesocketdir
mountPath: /host/var/run
readOnly: true
livenessProbe:
initialDelaySeconds: 15
periodSeconds: 15
tcpSocket:
port: 8126
timeoutSeconds: 5
initContainers:
- name: init-volume
image: "datadog/agent:7.21.1"
imagePullPolicy: IfNotPresent
command: ["bash", "-c"]
args:
- cp -r /etc/datadog-agent /opt
volumeMounts:
- name: config
mountPath: /opt/datadog-agent
resources: {}
- name: init-config
image: "datadog/agent:7.21.1"
imagePullPolicy: IfNotPresent
command: ["bash", "-c"]
args:
- for script in $(find /etc/cont-init.d/ -type f -name '*.sh' | sort) ; do bash $script ; done
volumeMounts:
- name: config
mountPath: /etc/datadog-agent
- name: procdir
mountPath: /host/proc
readOnly: true
- name: runtimesocketdir
mountPath: /host/var/run
readOnly: true
env:
#TODO : API key needs to be used from the "secrets" container above, but
# somehow its not working currently and so putting the secret directly here.
# The problem that i am facing is the "secrets" against is somehow adding the newline
# character to the key making the key invalid and hence not working.
- name: DD_API_KEY
value: "77ed0972ca94340f9db3fb78ee5e89cc"
- name: DD_KUBERNETES_KUBELET_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: KUBERNETES
value: "yes"
- name: DD_AC_EXCLUDE
value: "name:datadog-agent"
- name: DOCKER_HOST
value: "unix:///host/var/run/docker.sock"
- name: DD_LEADER_ELECTION
value: "true"
resources: {}
volumes:
- name: config
emptyDir: {}
- hostPath:
path: /var/run
name: runtimesocketdir
- hostPath:
path: /proc
name: procdir
- hostPath:
path: /sys/fs/cgroup
name: cgroups
- name: s6-run
emptyDir: {}
- hostPath:
path: "/var/lib/datadog-agent/logs"
name: pointerdir
- hostPath:
path: /var/log/pods
name: logpodpath
- hostPath:
path: /var/lib/docker/containers
name: logdockercontainerpath
- hostPath:
path: /var/run
name: dockersocketdir
tolerations:
affinity: {}
serviceAccountName: "datadog-agent"
nodeSelector:
kubernetes.io/os: linux
updateStrategy:
rollingUpdate:
maxUnavailable: 10%
type: RollingUpdate
---
apiVersion: apps/v1
kind: Deployment
metadata:
@ -32,14 +278,27 @@ spec:
terminationGracePeriodSeconds: 5
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/emailservice:v0.2.0
image: gcr.io/relyance-internal/boutique-app/emailservice:latest
ports:
- containerPort: 8080
env:
- name: PORT
value: "8080"
# - name: DISABLE_TRACING
# value: "1"
# Enable datadog tracing
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DD_ENV
value: "prod"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_SERVICE
value: "emailservice"
- name: DD_VERSION
value: "latest"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
readinessProbe:
@ -86,7 +345,7 @@ spec:
spec:
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/checkoutservice:v0.2.0
image: gcr.io/relyance-internal/boutique-app/checkoutservice:latest
ports:
- containerPort: 5050
readinessProbe:
@ -110,14 +369,29 @@ spec:
value: "currencyservice:7000"
- name: CART_SERVICE_ADDR
value: "cartservice:7070"
# - name: DISABLE_STATS
# value: "1"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
# - name: JAEGER_SERVICE_ADDR
# value: "jaeger-collector:14268"
# Enable datadog tracing
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DATADOG_APM_ENABLED
value: "true"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_ENV
value: "prod"
- name: DD_SERVICE
value: "checkoutservice"
- name: DD_VERSION
value: "latest"
- name: DISABLE_STATS
value: "1"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
- name: JAEGER_SERVICE_ADDR
value: "jaeger-collector:14268"
resources:
requests:
cpu: 100m
@ -155,7 +429,7 @@ spec:
terminationGracePeriodSeconds: 5
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/recommendationservice:v0.2.0
image: gcr.io/relyance-internal/boutique-app/recommendationservice:latest
ports:
- containerPort: 8080
readinessProbe:
@ -171,12 +445,24 @@ spec:
value: "8080"
- name: PRODUCT_CATALOG_SERVICE_ADDR
value: "productcatalogservice:3550"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
# - name: DISABLE_DEBUGGER
# value: "1"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DD_ENV
value: "prod"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_SERVICE
value: "recommendationservice"
- name: DD_VERSION
value: "latest"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
- name: DISABLE_DEBUGGER
value: "1"
resources:
requests:
cpu: 100m
@ -215,7 +501,7 @@ spec:
spec:
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/frontend:v0.2.0
image: gcr.io/relyance-internal/boutique-app/frontend:latest
ports:
- containerPort: 8080
readinessProbe:
@ -253,12 +539,25 @@ spec:
value: "adservice:9555"
- name: ENV_PLATFORM
value: "gcp"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
# - name: JAEGER_SERVICE_ADDR
# value: "jaeger-collector:14268"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
# Enable datadog tracing
- name: DATADOG_APM_ENABLED
value: "true"
- name: DD_ENV
value: "prod"
- name: DD_SERVICE
value: "frontend"
- name: DD_VERSION
value: "latest"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
- name: JAEGER_SERVICE_ADDR
value: "jaeger-collector:14268"
resources:
requests:
cpu: 100m
@ -309,7 +608,7 @@ spec:
terminationGracePeriodSeconds: 5
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/paymentservice:v0.2.0
image: gcr.io/relyance-internal/boutique-app/paymentservice:latest
ports:
- containerPort: 50051
env:
@ -358,20 +657,35 @@ spec:
terminationGracePeriodSeconds: 5
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/productcatalogservice:v0.2.0
image: gcr.io/relyance-internal/boutique-app/productcatalogservice:latest
ports:
- containerPort: 3550
env:
- name: PORT
value: "3550"
# - name: DISABLE_STATS
# value: "1"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
# - name: JAEGER_SERVICE_ADDR
# value: "jaeger-collector:14268"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
# Enable datadog tracing
- name: DATADOG_APM_ENABLED
value: "true"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_ENV
value: "prod"
- name: DD_SERVICE
value: "productcatalogservice"
- name: DD_VERSION
value: "latest"
- name: DISABLE_STATS
value: "1"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
- name: JAEGER_SERVICE_ADDR
value: "jaeger-collector:14268"
readinessProbe:
exec:
command: ["/bin/grpc_health_probe", "-addr=:3550"]
@ -415,7 +729,7 @@ spec:
terminationGracePeriodSeconds: 5
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/cartservice:v0.2.0
image: gcr.io/relyance-internal/boutique-app/cartservice:latest
ports:
- containerPort: 7070
env:
@ -475,7 +789,7 @@ spec:
restartPolicy: Always
containers:
- name: main
image: gcr.io/google-samples/microservices-demo/loadgenerator:v0.2.0
image: gcr.io/relyance-internal/boutique-app/loadgenerator:latest
env:
- name: FRONTEND_ADDR
value: "frontend:80"
@ -505,7 +819,7 @@ spec:
terminationGracePeriodSeconds: 5
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/currencyservice:v0.2.0
image: gcr.io/relyance-internal/boutique-app/currencyservice:latest
ports:
- name: grpc
containerPort: 7000
@ -560,20 +874,35 @@ spec:
spec:
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/shippingservice:v0.2.0
image: gcr.io/relyance-internal/boutique-app/shippingservice:latest
ports:
- containerPort: 50051
env:
- name: PORT
value: "50051"
# - name: DISABLE_STATS
# value: "1"
# - name: DISABLE_TRACING
# value: "1"
# - name: DISABLE_PROFILER
# value: "1"
# - name: JAEGER_SERVICE_ADDR
# value: "jaeger-collector:14268"
# Enable datadog tracing
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DATADOG_APM_ENABLED
value: "true"
- name: DD_LOGS_INJECTION
value: "true"
- name: DD_ENV
value: "prod"
- name: DD_SERVICE
value: "shippingservice"
- name: DD_VERSION
value: "latest"
- name: DISABLE_STATS
value: "1"
- name: DISABLE_TRACING
value: "1"
- name: DISABLE_PROFILER
value: "1"
- name: JAEGER_SERVICE_ADDR
value: "jaeger-collector:14268"
readinessProbe:
periodSeconds: 5
exec:
@ -671,7 +1000,7 @@ spec:
terminationGracePeriodSeconds: 5
containers:
- name: server
image: gcr.io/google-samples/microservices-demo/adservice:v0.2.0
image: gcr.io/relyance-internal/boutique-app/adservice:latest
ports:
- containerPort: 9555
env:

View file

@ -43,7 +43,7 @@ build:
- image: adservice
context: src/adservice
tagPolicy:
gitCommit: {}
sha256: {} # the sha256 always tags the images as `latest` (which points to sha256 of the image built)
deploy:
kubectl:
manifests:

View file

@ -9,19 +9,19 @@
"internal/version",
"monitoring/apiv3",
"profiler",
"trace/apiv2"
"trace/apiv2",
]
pruneopts = "UT"
revision = "457ea5c15ccf3b87db582c450e80101989da35f7"
version = "v0.40.0"
[[projects]]
digest = "1:bcd1b2dd631e720b6129e801bf0766c50fb4d39455c0a255047e8fc71c31152f"
digest = "1:5baabd5f5d47219f2bbcd130b61376e1b2e641e0826157b017dab3f88f018827"
name = "contrib.go.opencensus.io/exporter/jaeger"
packages = ["."]
pruneopts = "UT"
revision = "540daef1da72376e9b3e1d52e4f90403d72f5c00"
version = "v0.2.0"
revision = "30c8b0fe8ad9d0eac5785893f3941b2e72c5aaaa"
version = "v0.2.1"
[[projects]]
digest = "1:4b96dcd8534bc6450a922bd16a76360ba3381f0d1daf40abbaec91c053fbfeb5"
@ -32,9 +32,29 @@
version = "v0.5.0"
[[projects]]
digest = "1:1d3ad0f6a57c08e2168089a64c34313930571fcbe5359d71c608a97ce504f7ca"
digest = "1:4f726c47cabd8cf517114ff99d0bc16d23ae4e1cfe50c94986c57d90fc66a941"
name = "github.com/DataDog/datadog-go"
packages = ["statsd"]
pruneopts = "UT"
revision = "b5f99e5a502785e43356d1f710e8ae1ee948503b"
version = "v4.0.0"
[[projects]]
digest = "1:4287343c81d259e828b2e3b579270139a498a2168fbab81d89c3b9926b4ec740"
name = "github.com/GoogleCloudPlatform/microservices-demo"
packages = [
"src/checkoutservice/genproto",
"src/checkoutservice/money",
]
pruneopts = "UT"
revision = "c2095a7d4b8abd538251b705325d6a493a23e009"
version = "v0.2.0"
[[projects]]
digest = "1:9d2705f9d2e7da697c24b2ab104567b155107b2aad26ca615973c0a8f02f757a"
name = "github.com/golang/protobuf"
packages = [
"jsonpb",
"proto",
"protoc-gen-go/descriptor",
"ptypes",
@ -43,19 +63,33 @@
"ptypes/empty",
"ptypes/struct",
"ptypes/timestamp",
"ptypes/wrappers"
"ptypes/wrappers",
]
pruneopts = "UT"
revision = "b5d812f8a3706043e23a9cd5babf2e5423744d30"
version = "v1.3.1"
revision = "d04d7b157bb510b1e0c10132224b616ac0e26b17"
version = "v1.4.2"
[[projects]]
digest = "1:85af59d73a44bd58f524cf05dee34a5021afe1fa4a852079b535c38ae2d1a2e8"
name = "github.com/google/go-cmp"
packages = [
"cmp",
"cmp/internal/diff",
"cmp/internal/flags",
"cmp/internal/function",
"cmp/internal/value",
]
pruneopts = "UT"
revision = "9680bfaf28748393e28e00238d94070fb9972fd8"
version = "v0.5.1"
[[projects]]
branch = "master"
digest = "1:dcb1edb161b1b1cac9aedf2a17b9b2c7829e242624968875a3c1b97dd9f4ef00"
digest = "1:7f49181edc3aa34ec3145a0050ce4af901a9c3238774f362784ce39227bc1f3a"
name = "github.com/google/pprof"
packages = ["profile"]
pruneopts = "UT"
revision = "54271f7e092ff31b10b7626fee166cbc6304e350"
revision = "1a94d8640e99342fa76ae6296aaa921d08ac451f"
[[projects]]
digest = "1:582b704bebaa06b48c29b0cec224a6058a09c86883aaddabde889cd1a5f73e1b"
@ -74,33 +108,49 @@
version = "v2.0.5"
[[projects]]
digest = "1:31e761d97c76151dde79e9d28964a812c46efc5baee4085b86f68f0c654450de"
digest = "1:09cb61dc19af93deae01587e2fdb1c081e0bf48f1a5ad5fa24f48750dc57dce8"
name = "github.com/konsorten/go-windows-terminal-sequences"
packages = ["."]
pruneopts = "UT"
revision = "f55edac94c9bbba5d6182a4be46d86a2c9b5b50e"
version = "v1.0.2"
revision = "edb144dfd453055e1e49a3d8b410a660b5a87613"
version = "v1.0.3"
[[projects]]
digest = "1:04457f9f6f3ffc5fea48e71d62f2ca256637dee0a04d710288e27e05c8b41976"
digest = "1:5e73b34a27d827212102605789de00bd411b2e434812133c83935fe9897c75e1"
name = "github.com/philhofer/fwd"
packages = ["."]
pruneopts = "UT"
revision = "bb6d471dc95d4fe11e432687f8b70ff496cf3136"
version = "v1.0.0"
[[projects]]
digest = "1:05eebdd5727fea23083fce0d98d307d70c86baed644178e81608aaa9f09ea469"
name = "github.com/sirupsen/logrus"
packages = ["."]
pruneopts = "UT"
revision = "839c75faf7f98a33d445d181f3018b5c3409a45e"
version = "v1.4.2"
revision = "60c74ad9be0d874af0ab0daef6ab07c5c5911f0d"
version = "v1.6.0"
[[projects]]
digest = "1:be83cecd5ba066751e3f789c1faecf5a3229031c7986eb486f593a6e32446ac0"
digest = "1:6636bfca29dde8561c03e98ccddbe36240f13a01ac770d7ea07f4fd019ed6e65"
name = "github.com/tinylib/msgp"
packages = ["msgp"]
pruneopts = "UT"
revision = "4253cdaa5267687e3b7612da7ff105d4414174da"
version = "v1.1.2"
[[projects]]
digest = "1:a6175cb931f5b9da33e92f6057e0de28badbe6dfdc32f4bf378ffd9a2c461d03"
name = "github.com/uber/jaeger-client-go"
packages = [
"thrift",
"thrift-gen/agent",
"thrift-gen/jaeger",
"thrift-gen/zipkincore"
"thrift-gen/zipkincore",
]
pruneopts = "UT"
revision = "f2e1f58485aacf2975cdde9c9f5396e6d98c35ba"
version = "v2.21.1"
revision = "121ee6fb26fd9617fc30d0d95569a39c30ca3b76"
version = "v2.25.0"
[[projects]]
digest = "1:1bb914cfb78f68f488a91cd7872d3d06a5f83c5bbacf0296dbef44e120b00a91"
@ -119,7 +169,7 @@
"trace",
"trace/internal",
"trace/propagation",
"trace/tracestate"
"trace/tracestate",
]
pruneopts = "UT"
revision = "b11f239c032624b045c4c2bfd3d1287b4012ce89"
@ -127,7 +177,7 @@
[[projects]]
branch = "master"
digest = "1:2f357867bf425774d35beca5be718402a4488b8b23b1563ce8c5bb91d09285a7"
digest = "1:6a803f0f3ecbe7e804185a165b3e36eeb0a62f806e7fbe61e842966127991a64"
name = "golang.org/x/net"
packages = [
"context",
@ -137,43 +187,48 @@
"http2/hpack",
"idna",
"internal/timeseries",
"trace"
"trace",
]
pruneopts = "UT"
revision = "da137c7871d730100384dbcf36e6f8fa493aef5b"
revision = "c89045814202410a2d67ec20ecf177ec77ceae7f"
[[projects]]
branch = "master"
digest = "1:31e33f76456ccf54819ab4a646cf01271d1a99d7712ab84bf1a9e7b61cd2031b"
digest = "1:79edde3241bb55de9f4143d5083bfcff722e550c3cb8db94084eab50d0e440b5"
name = "golang.org/x/oauth2"
packages = [
".",
"google",
"internal",
"jws",
"jwt"
"jwt",
]
pruneopts = "UT"
revision = "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33"
revision = "bf48bf16ab8d622ce64ec6ce98d2c98f916b6303"
[[projects]]
branch = "master"
digest = "1:382bb5a7fb4034db3b6a2d19e5a4a6bcf52f4750530603c01ca18a172fa3089b"
digest = "1:4692f916cb72b2c295f04841036d85a3f13e96d1cc9e8e4c2c30edebac518053"
name = "golang.org/x/sync"
packages = ["semaphore"]
pruneopts = "UT"
revision = "112230192c580c3556b8cee6403af37a4fc5f28c"
revision = "6e8e738ad208923de99951fe0b48239bfd864f28"
[[projects]]
branch = "master"
digest = "1:730ba27cd66db3b98ec8f51a6f20d45ec277d490cca36b1f54e31d3fcaf4840e"
digest = "1:288524d218ffbd2adb8cf423f2afb863ccce0a000446a2b0d467931d1e517ba0"
name = "golang.org/x/sys"
packages = ["unix"]
packages = [
"internal/unsafeheader",
"unix",
"windows",
"windows/registry",
]
pruneopts = "UT"
revision = "04f50cda93cbb67f2afa353c52f342100e80e625"
revision = "c12d262b63d83031f2db2f528267f9a4f58e2775"
[[projects]]
digest = "1:8d8faad6b12a3a4c819a3f9618cb6ee1fa1cfc33253abeeea8b55336721e3405"
digest = "1:fa940333c48808b0d86ef21f412ffcfd0e5084a82f13905c028a404803b1908f"
name = "golang.org/x/text"
packages = [
"collate",
@ -191,15 +246,34 @@
"unicode/bidi",
"unicode/cldr",
"unicode/norm",
"unicode/rangetable"
"unicode/rangetable",
]
pruneopts = "UT"
revision = "342b2e1fbaa52c93f31447ad2c6abc048c63e475"
version = "v0.3.2"
revision = "23ae387dee1f90d29a23c0e87ee0b46038fbed0e"
version = "v0.3.3"
[[projects]]
branch = "master"
digest = "1:bc06b12d8436550fccc0212037e9281a7e4d53db25c2349eb3cc6c3457e0406b"
digest = "1:9a12483c63e8328a477280cd6855689af0f584eb580b66c0d113a1f5fe7791b0"
name = "golang.org/x/time"
packages = ["rate"]
pruneopts = "UT"
revision = "3af7569d3a1e776fc2a3c1cec133b43105ea9c2e"
[[projects]]
branch = "master"
digest = "1:918a46e4a2fb83df33f668f5a6bd51b2996775d073fce1800d3ec01b0a5ddd2b"
name = "golang.org/x/xerrors"
packages = [
".",
"internal",
]
pruneopts = "UT"
revision = "5ec99f83aff198f5fbd629d6c8d8eb38a04218ca"
[[projects]]
branch = "master"
digest = "1:49329e5d3d686037e3255b4d555f3751d275771cb3e60f6fe6cfa47abf90110f"
name = "google.golang.org/api"
packages = [
"googleapi/transport",
@ -208,15 +282,16 @@
"option",
"support/bundler",
"transport",
"transport/cert",
"transport/grpc",
"transport/http",
"transport/http/internal/propagation"
"transport/http/internal/propagation",
]
pruneopts = "UT"
revision = "aae1d1b89c27132abe4fa22731a2a61e7089079c"
revision = "b77a6912936dced70abf0869ccb1d02d802567de"
[[projects]]
digest = "1:2c26b1c47556c0e5e73cdb05d8361c463737eee4baac35d38b40c728c3074a94"
digest = "1:9a3c550c85a5a62ccc4cadd8525497b99554094a1adecc560c97bebc231ca81b"
name = "google.golang.org/appengine"
packages = [
".",
@ -230,15 +305,15 @@
"internal/socket",
"internal/urlfetch",
"socket",
"urlfetch"
"urlfetch",
]
pruneopts = "UT"
revision = "b2f4a3cf3c67576a2ee09e1fe62656a5086ce880"
version = "v1.6.1"
revision = "553959209a20f3be281c16dd5be5c740a893978f"
version = "v1.6.6"
[[projects]]
branch = "master"
digest = "1:cb0f37e3cdf50a27abbf33a48797b30786239d4fd69dbfbbc63cfa19d400d3ce"
digest = "1:03c2b11b1e1f705b0f5cfc21a5e2b3e0e71456173cd52591c7478b3d1f2c9792"
name = "google.golang.org/genproto"
packages = [
"googleapis/api",
@ -252,20 +327,24 @@
"googleapis/monitoring/v3",
"googleapis/rpc/errdetails",
"googleapis/rpc/status",
"protobuf/field_mask"
"googleapis/type/calendarperiod",
"protobuf/field_mask",
]
pruneopts = "UT"
revision = "3bdd9d9f5532d75d09efb230bd767d265245cfe5"
revision = "f69a88009b70a94c67e3910bf1663f5df9fbfc6d"
[[projects]]
digest = "1:f379776e36e55e5b5cbf7187ea58280812785071de53046230006e47894650b6"
digest = "1:92f84847381cc2ee44933fa3cfd6d6f669596db21a22e122441ea6b8358afe3d"
name = "google.golang.org/grpc"
packages = [
".",
"attributes",
"backoff",
"balancer",
"balancer/base",
"balancer/grpclb",
"balancer/grpclb/grpc_lb_v1",
"balancer/grpclb/state",
"balancer/roundrobin",
"binarylog/grpc_binarylog_v1",
"codes",
@ -289,27 +368,96 @@
"internal/backoff",
"internal/balancerload",
"internal/binarylog",
"internal/buffer",
"internal/channelz",
"internal/credentials",
"internal/envconfig",
"internal/grpclog",
"internal/grpcrand",
"internal/grpcsync",
"internal/grpcutil",
"internal/resolver/dns",
"internal/resolver/passthrough",
"internal/serviceconfig",
"internal/status",
"internal/syscall",
"internal/transport",
"keepalive",
"metadata",
"naming",
"peer",
"resolver",
"resolver/dns",
"resolver/passthrough",
"serviceconfig",
"stats",
"status",
"tap"
"tap",
]
pruneopts = "UT"
revision = "1d89a3c832915b2314551c1d2a506874d62e53f7"
version = "v1.22.0"
revision = "bde0263672f027525e2950992a4c7db7af572b59"
version = "v1.31.0"
[[projects]]
digest = "1:4a0202ad403c5a9c79ae7d6673aabb8e4ae2163654167229a49cc0155687effa"
name = "google.golang.org/protobuf"
packages = [
"encoding/protojson",
"encoding/prototext",
"encoding/protowire",
"internal/descfmt",
"internal/descopts",
"internal/detrand",
"internal/encoding/defval",
"internal/encoding/json",
"internal/encoding/messageset",
"internal/encoding/tag",
"internal/encoding/text",
"internal/errors",
"internal/fieldsort",
"internal/filedesc",
"internal/filetype",
"internal/flags",
"internal/genid",
"internal/impl",
"internal/mapsort",
"internal/pragma",
"internal/set",
"internal/strs",
"internal/version",
"proto",
"reflect/protoreflect",
"reflect/protoregistry",
"runtime/protoiface",
"runtime/protoimpl",
"types/descriptorpb",
"types/known/anypb",
"types/known/durationpb",
"types/known/emptypb",
"types/known/fieldmaskpb",
"types/known/structpb",
"types/known/timestamppb",
"types/known/wrapperspb",
]
pruneopts = "UT"
revision = "3f7a61f89bb6813f89d981d1870ed68da0b3c3f1"
version = "v1.25.0"
[[projects]]
digest = "1:c4d5c7382aa68038f57265590b6025bebb3d41fdd66bc8474f0644b422130890"
name = "gopkg.in/DataDog/dd-trace-go.v1"
packages = [
"contrib/google.golang.org/grpc",
"contrib/google.golang.org/internal/grpcutil",
"ddtrace",
"ddtrace/ext",
"ddtrace/internal",
"ddtrace/tracer",
"internal",
"internal/globalconfig",
"internal/log",
"internal/version",
]
pruneopts = "UT"
revision = "6d7c52cd8ab1ea309fd54c1a2ef472fadb84429c"
version = "v1.26.0"
[solve-meta]
analyzer-name = "dep"
@ -318,6 +466,8 @@
"cloud.google.com/go/profiler",
"contrib.go.opencensus.io/exporter/jaeger",
"contrib.go.opencensus.io/exporter/stackdriver",
"github.com/GoogleCloudPlatform/microservices-demo/src/checkoutservice/genproto",
"github.com/GoogleCloudPlatform/microservices-demo/src/checkoutservice/money",
"github.com/golang/protobuf/proto",
"github.com/google/uuid",
"github.com/sirupsen/logrus",
@ -328,7 +478,9 @@
"google.golang.org/grpc",
"google.golang.org/grpc/codes",
"google.golang.org/grpc/health/grpc_health_v1",
"google.golang.org/grpc/status"
"google.golang.org/grpc/status",
"gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc",
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer",
]
solver-name = "gps-cdcl"
solver-version = 1

View file

@ -23,8 +23,6 @@
# non-go = false
# go-tests = true
# unused-packages = true
[[constraint]]
name = "cloud.google.com/go"
version = "0.40.0"
@ -60,3 +58,4 @@
[[constraint]]
name = "contrib.go.opencensus.io/exporter/jaeger"
version = "0.2.0"

View file

@ -29,9 +29,11 @@ import (
"go.opencensus.io/plugin/ocgrpc"
"go.opencensus.io/stats/view"
"go.opencensus.io/trace"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
gt "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc"
"google.golang.org/grpc"
pb "github.com/GoogleCloudPlatform/microservices-demo/src/checkoutservice/genproto"
money "github.com/GoogleCloudPlatform/microservices-demo/src/checkoutservice/money"
@ -69,6 +71,12 @@ type checkoutService struct {
}
func main() {
tracer.Start(
tracer.WithEnv("prod"),
tracer.WithService("checkoutservice"),
tracer.WithDebugMode(true),
)
defer tracer.Stop()
if os.Getenv("DISABLE_TRACING") == "" {
log.Info("Tracing enabled.")
go initTracing()
@ -104,13 +112,24 @@ func main() {
}
var srv *grpc.Server
if os.Getenv("DISABLE_STATS") == "" {
log.Info("Stats enabled.")
srv = grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{}))
} else if os.Getenv("DATADOG_APM_ENABLED") == "true" { //datadog traces enabled
log.Info("Datadog enabled.")
// Create the server interceptor using the grpc trace package.
grpc_option := gt.WithServiceName(os.Getenv("DD_SERVICE"))
unary_server_trace := gt.UnaryServerInterceptor(grpc_option)
stream_server_trace := gt.StreamServerInterceptor(grpc_option)
unary_trace := grpc.UnaryInterceptor(unary_server_trace)
stream_trace := grpc.StreamInterceptor(stream_server_trace)
srv = grpc.NewServer(unary_trace, stream_trace)
} else {
log.Info("Stats disabled.")
srv = grpc.NewServer()
srv = grpc.NewServer()
}
pb.RegisterCheckoutServiceServer(srv, svc)
healthpb.RegisterHealthServer(srv, svc)
log.Infof("starting to listen on tcp: %q", lis.Addr().String())

View file

@ -40,6 +40,8 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \
chmod +x /bin/grpc_health_probe
RUN pip install --force ddtrace
WORKDIR /email_server
# Grab packages from builder
@ -47,6 +49,5 @@ COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/
# Add the application
COPY . .
EXPOSE 8080
ENTRYPOINT [ "python", "email_server.py" ]

View file

@ -25,6 +25,9 @@ logger = getJSONLogger('emailservice-client')
from opencensus.trace.tracer import Tracer
from opencensus.trace.exporters import stackdriver_exporter
from opencensus.trace.ext.grpc import client_interceptor
from ddtrace import patch_all
patch_all()
from ddtrace import tracer
try:
exporter = stackdriver_exporter.StackdriverExporter()
@ -33,6 +36,7 @@ try:
except:
tracer_interceptor = client_interceptor.OpenCensusClientInterceptor()
@tracer.wrap('send_confirmation_email', service='emailservice')
def send_confirmation_email(email, order):
channel = grpc.insecure_channel('0.0.0.0:8080')
channel = grpc.intercept_channel(channel, tracer_interceptor)

View file

@ -38,6 +38,10 @@ from opencensus.trace.samplers import always_on
# import googleclouddebugger
import googlecloudprofiler
from ddtrace import patch_all
patch_all()
from ddtrace import tracer
from logger import getJSONLogger
logger = getJSONLogger('emailservice-server')
@ -118,6 +122,7 @@ class HealthCheck():
return health_pb2.HealthCheckResponse(
status=health_pb2.HealthCheckResponse.SERVING)
@tracer.wrap('start', service='emailservice')
def start(dummy_mode):
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10),
interceptors=(tracer_interceptor,))

View file

@ -5,3 +5,4 @@ jinja2==2.10
opencensus[stackdriver]==0.1.10
python-json-logger==0.1.9
google-cloud-profiler==1.0.8
ddtrace

View file

@ -2,7 +2,7 @@
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile --output-file requirements.txt requirements.in
# pip-compile --output-file=requirements.txt requirements.in
#
cachetools==3.0.0 # via google-auth
certifi==2018.11.29 # via requests
@ -19,16 +19,23 @@ grpcio-health-checking==1.12.1 # via -r requirements.in
grpcio==1.16.1 # via -r requirements.in, google-api-core, grpcio-health-checking
httplib2==0.18.0 # via google-api-python-client, google-auth-httplib2
idna==2.8 # via requests
intervaltree==3.1.0 # via ddtrace
jinja2==2.10 # via -r requirements.in
markupsafe==1.1.0 # via jinja2
opencensus[stackdriver]==0.1.10 # via -r requirements.in
protobuf==3.6.1 # via google-api-core, google-cloud-profiler, googleapis-common-protos, grpcio-health-checking
protobuf==3.6.1 # via ddtrace, google-api-core, google-cloud-profiler, googleapis-common-protos, grpcio-health-checking
pyasn1-modules==0.2.3 # via google-auth
pyasn1==0.4.5 # via pyasn1-modules, rsa
python-json-logger==0.1.9 # via -r requirements.in
pytz==2018.9 # via google-api-core
requests==2.21.0 # via google-api-core, google-cloud-profiler
rsa==4.0 # via google-auth
six==1.12.0 # via google-api-core, google-api-python-client, google-auth, grpcio, protobuf
six==1.12.0 # via google-api-core, google-api-python-client, google-auth, grpcio, protobuf, tenacity
sortedcontainers==2.2.2 # via intervaltree
tenacity==6.2.0 # via ddtrace
uritemplate==3.0.0 # via google-api-python-client
urllib3==1.24.2 # via requests
ddtrace
# The following packages are considered to be unsafe in a requirements file:
# setuptools

266
src/frontend/Gopkg.lock generated
View file

@ -9,19 +9,19 @@
"internal/version",
"monitoring/apiv3",
"profiler",
"trace/apiv2"
"trace/apiv2",
]
pruneopts = "UT"
revision = "457ea5c15ccf3b87db582c450e80101989da35f7"
version = "v0.40.0"
[[projects]]
digest = "1:bcd1b2dd631e720b6129e801bf0766c50fb4d39455c0a255047e8fc71c31152f"
digest = "1:5baabd5f5d47219f2bbcd130b61376e1b2e641e0826157b017dab3f88f018827"
name = "contrib.go.opencensus.io/exporter/jaeger"
packages = ["."]
pruneopts = "UT"
revision = "540daef1da72376e9b3e1d52e4f90403d72f5c00"
version = "v0.2.0"
revision = "30c8b0fe8ad9d0eac5785893f3941b2e72c5aaaa"
version = "v0.2.1"
[[projects]]
digest = "1:4b96dcd8534bc6450a922bd16a76360ba3381f0d1daf40abbaec91c053fbfeb5"
@ -32,9 +32,29 @@
version = "v0.5.0"
[[projects]]
digest = "1:1d3ad0f6a57c08e2168089a64c34313930571fcbe5359d71c608a97ce504f7ca"
digest = "1:4f726c47cabd8cf517114ff99d0bc16d23ae4e1cfe50c94986c57d90fc66a941"
name = "github.com/DataDog/datadog-go"
packages = ["statsd"]
pruneopts = "UT"
revision = "b5f99e5a502785e43356d1f710e8ae1ee948503b"
version = "v4.0.0"
[[projects]]
digest = "1:c4f0a05580fb5d27e1cc8f5723a8d33fd97590a931e845f23b104e05c02ea80b"
name = "github.com/GoogleCloudPlatform/microservices-demo"
packages = [
"src/frontend/genproto",
"src/frontend/money",
]
pruneopts = "UT"
revision = "c2095a7d4b8abd538251b705325d6a493a23e009"
version = "v0.2.0"
[[projects]]
digest = "1:9d2705f9d2e7da697c24b2ab104567b155107b2aad26ca615973c0a8f02f757a"
name = "github.com/golang/protobuf"
packages = [
"jsonpb",
"proto",
"protoc-gen-go/descriptor",
"ptypes",
@ -43,19 +63,33 @@
"ptypes/empty",
"ptypes/struct",
"ptypes/timestamp",
"ptypes/wrappers"
"ptypes/wrappers",
]
pruneopts = "UT"
revision = "b5d812f8a3706043e23a9cd5babf2e5423744d30"
version = "v1.3.1"
revision = "d04d7b157bb510b1e0c10132224b616ac0e26b17"
version = "v1.4.2"
[[projects]]
digest = "1:85af59d73a44bd58f524cf05dee34a5021afe1fa4a852079b535c38ae2d1a2e8"
name = "github.com/google/go-cmp"
packages = [
"cmp",
"cmp/internal/diff",
"cmp/internal/flags",
"cmp/internal/function",
"cmp/internal/value",
]
pruneopts = "UT"
revision = "9680bfaf28748393e28e00238d94070fb9972fd8"
version = "v0.5.1"
[[projects]]
branch = "master"
digest = "1:dcb1edb161b1b1cac9aedf2a17b9b2c7829e242624968875a3c1b97dd9f4ef00"
digest = "1:7f49181edc3aa34ec3145a0050ce4af901a9c3238774f362784ce39227bc1f3a"
name = "github.com/google/pprof"
packages = ["profile"]
pruneopts = "UT"
revision = "54271f7e092ff31b10b7626fee166cbc6304e350"
revision = "1a94d8640e99342fa76ae6296aaa921d08ac451f"
[[projects]]
digest = "1:582b704bebaa06b48c29b0cec224a6058a09c86883aaddabde889cd1a5f73e1b"
@ -74,20 +108,28 @@
version = "v2.0.5"
[[projects]]
digest = "1:cbec35fe4d5a4fba369a656a8cd65e244ea2c743007d8f6c1ccb132acf9d1296"
digest = "1:6078383dbb7405bfa3ce16957f37564e3b716afa29b6eb45ffdb6674624d1e0d"
name = "github.com/gorilla/mux"
packages = ["."]
pruneopts = "UT"
revision = "00bdffe0f3c77e27d2cf6f5c70232a2d3e4d9c15"
version = "v1.7.3"
revision = "98cb6bf42e086f6af920b965c38cacc07402d51b"
version = "v1.8.0"
[[projects]]
digest = "1:31e761d97c76151dde79e9d28964a812c46efc5baee4085b86f68f0c654450de"
digest = "1:09cb61dc19af93deae01587e2fdb1c081e0bf48f1a5ad5fa24f48750dc57dce8"
name = "github.com/konsorten/go-windows-terminal-sequences"
packages = ["."]
pruneopts = "UT"
revision = "f55edac94c9bbba5d6182a4be46d86a2c9b5b50e"
version = "v1.0.2"
revision = "edb144dfd453055e1e49a3d8b410a660b5a87613"
version = "v1.0.3"
[[projects]]
digest = "1:5e73b34a27d827212102605789de00bd411b2e434812133c83935fe9897c75e1"
name = "github.com/philhofer/fwd"
packages = ["."]
pruneopts = "UT"
revision = "bb6d471dc95d4fe11e432687f8b70ff496cf3136"
version = "v1.0.0"
[[projects]]
digest = "1:cf31692c14422fa27c83a05292eb5cbe0fb2775972e8f1f8446a71549bd8980b"
@ -98,25 +140,33 @@
version = "v0.8.1"
[[projects]]
digest = "1:04457f9f6f3ffc5fea48e71d62f2ca256637dee0a04d710288e27e05c8b41976"
digest = "1:05eebdd5727fea23083fce0d98d307d70c86baed644178e81608aaa9f09ea469"
name = "github.com/sirupsen/logrus"
packages = ["."]
pruneopts = "UT"
revision = "839c75faf7f98a33d445d181f3018b5c3409a45e"
version = "v1.4.2"
revision = "60c74ad9be0d874af0ab0daef6ab07c5c5911f0d"
version = "v1.6.0"
[[projects]]
digest = "1:be83cecd5ba066751e3f789c1faecf5a3229031c7986eb486f593a6e32446ac0"
digest = "1:6636bfca29dde8561c03e98ccddbe36240f13a01ac770d7ea07f4fd019ed6e65"
name = "github.com/tinylib/msgp"
packages = ["msgp"]
pruneopts = "UT"
revision = "4253cdaa5267687e3b7612da7ff105d4414174da"
version = "v1.1.2"
[[projects]]
digest = "1:a6175cb931f5b9da33e92f6057e0de28badbe6dfdc32f4bf378ffd9a2c461d03"
name = "github.com/uber/jaeger-client-go"
packages = [
"thrift",
"thrift-gen/agent",
"thrift-gen/jaeger",
"thrift-gen/zipkincore"
"thrift-gen/zipkincore",
]
pruneopts = "UT"
revision = "f2e1f58485aacf2975cdde9c9f5396e6d98c35ba"
version = "v2.21.1"
revision = "121ee6fb26fd9617fc30d0d95569a39c30ca3b76"
version = "v2.25.0"
[[projects]]
digest = "1:1bb914cfb78f68f488a91cd7872d3d06a5f83c5bbacf0296dbef44e120b00a91"
@ -135,7 +185,7 @@
"trace",
"trace/internal",
"trace/propagation",
"trace/tracestate"
"trace/tracestate",
]
pruneopts = "UT"
revision = "b11f239c032624b045c4c2bfd3d1287b4012ce89"
@ -143,7 +193,7 @@
[[projects]]
branch = "master"
digest = "1:2f357867bf425774d35beca5be718402a4488b8b23b1563ce8c5bb91d09285a7"
digest = "1:6a803f0f3ecbe7e804185a165b3e36eeb0a62f806e7fbe61e842966127991a64"
name = "golang.org/x/net"
packages = [
"context",
@ -153,43 +203,48 @@
"http2/hpack",
"idna",
"internal/timeseries",
"trace"
"trace",
]
pruneopts = "UT"
revision = "da137c7871d730100384dbcf36e6f8fa493aef5b"
revision = "c89045814202410a2d67ec20ecf177ec77ceae7f"
[[projects]]
branch = "master"
digest = "1:31e33f76456ccf54819ab4a646cf01271d1a99d7712ab84bf1a9e7b61cd2031b"
digest = "1:79edde3241bb55de9f4143d5083bfcff722e550c3cb8db94084eab50d0e440b5"
name = "golang.org/x/oauth2"
packages = [
".",
"google",
"internal",
"jws",
"jwt"
"jwt",
]
pruneopts = "UT"
revision = "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33"
revision = "bf48bf16ab8d622ce64ec6ce98d2c98f916b6303"
[[projects]]
branch = "master"
digest = "1:382bb5a7fb4034db3b6a2d19e5a4a6bcf52f4750530603c01ca18a172fa3089b"
digest = "1:4692f916cb72b2c295f04841036d85a3f13e96d1cc9e8e4c2c30edebac518053"
name = "golang.org/x/sync"
packages = ["semaphore"]
pruneopts = "UT"
revision = "112230192c580c3556b8cee6403af37a4fc5f28c"
revision = "6e8e738ad208923de99951fe0b48239bfd864f28"
[[projects]]
branch = "master"
digest = "1:730ba27cd66db3b98ec8f51a6f20d45ec277d490cca36b1f54e31d3fcaf4840e"
digest = "1:288524d218ffbd2adb8cf423f2afb863ccce0a000446a2b0d467931d1e517ba0"
name = "golang.org/x/sys"
packages = ["unix"]
packages = [
"internal/unsafeheader",
"unix",
"windows",
"windows/registry",
]
pruneopts = "UT"
revision = "04f50cda93cbb67f2afa353c52f342100e80e625"
revision = "c12d262b63d83031f2db2f528267f9a4f58e2775"
[[projects]]
digest = "1:8d8faad6b12a3a4c819a3f9618cb6ee1fa1cfc33253abeeea8b55336721e3405"
digest = "1:fa940333c48808b0d86ef21f412ffcfd0e5084a82f13905c028a404803b1908f"
name = "golang.org/x/text"
packages = [
"collate",
@ -207,15 +262,34 @@
"unicode/bidi",
"unicode/cldr",
"unicode/norm",
"unicode/rangetable"
"unicode/rangetable",
]
pruneopts = "UT"
revision = "342b2e1fbaa52c93f31447ad2c6abc048c63e475"
version = "v0.3.2"
revision = "23ae387dee1f90d29a23c0e87ee0b46038fbed0e"
version = "v0.3.3"
[[projects]]
branch = "master"
digest = "1:bc06b12d8436550fccc0212037e9281a7e4d53db25c2349eb3cc6c3457e0406b"
digest = "1:9a12483c63e8328a477280cd6855689af0f584eb580b66c0d113a1f5fe7791b0"
name = "golang.org/x/time"
packages = ["rate"]
pruneopts = "UT"
revision = "3af7569d3a1e776fc2a3c1cec133b43105ea9c2e"
[[projects]]
branch = "master"
digest = "1:918a46e4a2fb83df33f668f5a6bd51b2996775d073fce1800d3ec01b0a5ddd2b"
name = "golang.org/x/xerrors"
packages = [
".",
"internal",
]
pruneopts = "UT"
revision = "5ec99f83aff198f5fbd629d6c8d8eb38a04218ca"
[[projects]]
branch = "master"
digest = "1:49329e5d3d686037e3255b4d555f3751d275771cb3e60f6fe6cfa47abf90110f"
name = "google.golang.org/api"
packages = [
"googleapi/transport",
@ -224,15 +298,16 @@
"option",
"support/bundler",
"transport",
"transport/cert",
"transport/grpc",
"transport/http",
"transport/http/internal/propagation"
"transport/http/internal/propagation",
]
pruneopts = "UT"
revision = "aae1d1b89c27132abe4fa22731a2a61e7089079c"
revision = "b77a6912936dced70abf0869ccb1d02d802567de"
[[projects]]
digest = "1:2c26b1c47556c0e5e73cdb05d8361c463737eee4baac35d38b40c728c3074a94"
digest = "1:9a3c550c85a5a62ccc4cadd8525497b99554094a1adecc560c97bebc231ca81b"
name = "google.golang.org/appengine"
packages = [
".",
@ -246,15 +321,15 @@
"internal/socket",
"internal/urlfetch",
"socket",
"urlfetch"
"urlfetch",
]
pruneopts = "UT"
revision = "b2f4a3cf3c67576a2ee09e1fe62656a5086ce880"
version = "v1.6.1"
revision = "553959209a20f3be281c16dd5be5c740a893978f"
version = "v1.6.6"
[[projects]]
branch = "master"
digest = "1:cb0f37e3cdf50a27abbf33a48797b30786239d4fd69dbfbbc63cfa19d400d3ce"
digest = "1:03c2b11b1e1f705b0f5cfc21a5e2b3e0e71456173cd52591c7478b3d1f2c9792"
name = "google.golang.org/genproto"
packages = [
"googleapis/api",
@ -268,20 +343,24 @@
"googleapis/monitoring/v3",
"googleapis/rpc/errdetails",
"googleapis/rpc/status",
"protobuf/field_mask"
"googleapis/type/calendarperiod",
"protobuf/field_mask",
]
pruneopts = "UT"
revision = "3bdd9d9f5532d75d09efb230bd767d265245cfe5"
revision = "f69a88009b70a94c67e3910bf1663f5df9fbfc6d"
[[projects]]
digest = "1:94dd3fb42315b97533bb74fe15498905734bc3a3c6e692dc7839fec749d44d26"
digest = "1:00072b631310111e6eadd21523f02d9f5d82e88d06672b72f56aace18f3864b8"
name = "google.golang.org/grpc"
packages = [
".",
"attributes",
"backoff",
"balancer",
"balancer/base",
"balancer/grpclb",
"balancer/grpclb/grpc_lb_v1",
"balancer/grpclb/state",
"balancer/roundrobin",
"binarylog/grpc_binarylog_v1",
"codes",
@ -304,27 +383,96 @@
"internal/backoff",
"internal/balancerload",
"internal/binarylog",
"internal/buffer",
"internal/channelz",
"internal/credentials",
"internal/envconfig",
"internal/grpclog",
"internal/grpcrand",
"internal/grpcsync",
"internal/grpcutil",
"internal/resolver/dns",
"internal/resolver/passthrough",
"internal/serviceconfig",
"internal/status",
"internal/syscall",
"internal/transport",
"keepalive",
"metadata",
"naming",
"peer",
"resolver",
"resolver/dns",
"resolver/passthrough",
"serviceconfig",
"stats",
"status",
"tap"
"tap",
]
pruneopts = "UT"
revision = "1d89a3c832915b2314551c1d2a506874d62e53f7"
version = "v1.22.0"
revision = "bde0263672f027525e2950992a4c7db7af572b59"
version = "v1.31.0"
[[projects]]
digest = "1:4a0202ad403c5a9c79ae7d6673aabb8e4ae2163654167229a49cc0155687effa"
name = "google.golang.org/protobuf"
packages = [
"encoding/protojson",
"encoding/prototext",
"encoding/protowire",
"internal/descfmt",
"internal/descopts",
"internal/detrand",
"internal/encoding/defval",
"internal/encoding/json",
"internal/encoding/messageset",
"internal/encoding/tag",
"internal/encoding/text",
"internal/errors",
"internal/fieldsort",
"internal/filedesc",
"internal/filetype",
"internal/flags",
"internal/genid",
"internal/impl",
"internal/mapsort",
"internal/pragma",
"internal/set",
"internal/strs",
"internal/version",
"proto",
"reflect/protoreflect",
"reflect/protoregistry",
"runtime/protoiface",
"runtime/protoimpl",
"types/descriptorpb",
"types/known/anypb",
"types/known/durationpb",
"types/known/emptypb",
"types/known/fieldmaskpb",
"types/known/structpb",
"types/known/timestamppb",
"types/known/wrapperspb",
]
pruneopts = "UT"
revision = "3f7a61f89bb6813f89d981d1870ed68da0b3c3f1"
version = "v1.25.0"
[[projects]]
digest = "1:c4d5c7382aa68038f57265590b6025bebb3d41fdd66bc8474f0644b422130890"
name = "gopkg.in/DataDog/dd-trace-go.v1"
packages = [
"contrib/google.golang.org/grpc",
"contrib/google.golang.org/internal/grpcutil",
"ddtrace",
"ddtrace/ext",
"ddtrace/internal",
"ddtrace/tracer",
"internal",
"internal/globalconfig",
"internal/log",
"internal/version",
]
pruneopts = "UT"
revision = "6d7c52cd8ab1ea309fd54c1a2ef472fadb84429c"
version = "v1.26.0"
[solve-meta]
analyzer-name = "dep"
@ -333,6 +481,8 @@
"cloud.google.com/go/profiler",
"contrib.go.opencensus.io/exporter/jaeger",
"contrib.go.opencensus.io/exporter/stackdriver",
"github.com/GoogleCloudPlatform/microservices-demo/src/frontend/genproto",
"github.com/GoogleCloudPlatform/microservices-demo/src/frontend/money",
"github.com/golang/protobuf/proto",
"github.com/google/uuid",
"github.com/gorilla/mux",
@ -344,7 +494,9 @@
"go.opencensus.io/stats/view",
"go.opencensus.io/trace",
"golang.org/x/net/context",
"google.golang.org/grpc"
"google.golang.org/grpc",
"gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc",
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer",
]
solver-name = "gps-cdcl"
solver-version = 1

View file

@ -33,6 +33,8 @@ import (
"go.opencensus.io/stats/view"
"go.opencensus.io/trace"
"google.golang.org/grpc"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
gt "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc"
)
const (
@ -93,7 +95,11 @@ func main() {
TimestampFormat: time.RFC3339Nano,
}
log.Out = os.Stdout
tracer.Start(
tracer.WithEnv("prod"),
tracer.WithService("frontend"),
)
defer tracer.Stop()
if os.Getenv("DISABLE_TRACING") == "" {
log.Info("Tracing enabled.")
go initTracing(log)
@ -263,11 +269,27 @@ func mustMapEnv(target *string, envKey string) {
func mustConnGRPC(ctx context.Context, conn **grpc.ClientConn, addr string) {
var err error
*conn, err = grpc.DialContext(ctx, addr,
grpc.WithInsecure(),
grpc.WithTimeout(time.Second*3),
grpc.WithStatsHandler(&ocgrpc.ClientHandler{}))
if err != nil {
panic(errors.Wrapf(err, "grpc: failed to connect %s", addr))
if os.Getenv("DATADOG_APM_ENABLED") == "true" { //datadog traces enabled
// Create the client interceptor using the grpc trace package.
si := gt.StreamClientInterceptor(gt.WithServiceName(os.Getenv("DD_SERVICE")))
ui := gt.UnaryClientInterceptor(gt.WithServiceName(os.Getenv("DD_SERVICE")))
*conn, err = grpc.DialContext(ctx, addr,
grpc.WithInsecure(),
grpc.WithTimeout(time.Second*3),
grpc.WithStatsHandler(&ocgrpc.ClientHandler{}),
grpc.WithStreamInterceptor(si), grpc.WithUnaryInterceptor(ui))
if err != nil {
panic(errors.Wrapf(err, "grpc: failed to connect %s", addr))
}
} else {
*conn, err = grpc.DialContext(ctx, addr,
grpc.WithInsecure(),
grpc.WithTimeout(time.Second*3),
grpc.WithStatsHandler(&ocgrpc.ClientHandler{}),
)
if err != nil {
panic(errors.Wrapf(err, "grpc: failed to connect %s", addr))
}
}
}

View file

@ -22,7 +22,7 @@ RUN apt-get -qq update \
COPY requirements.txt .
RUN pip install --install-option="--prefix=/install" -r requirements.txt
RUN pip install --prefix=/install -r requirements.txt
FROM base
COPY --from=builder /install /usr/local

View file

@ -9,19 +9,19 @@
"internal/version",
"monitoring/apiv3",
"profiler",
"trace/apiv2"
"trace/apiv2",
]
pruneopts = "UT"
revision = "457ea5c15ccf3b87db582c450e80101989da35f7"
version = "v0.40.0"
[[projects]]
digest = "1:bcd1b2dd631e720b6129e801bf0766c50fb4d39455c0a255047e8fc71c31152f"
digest = "1:5baabd5f5d47219f2bbcd130b61376e1b2e641e0826157b017dab3f88f018827"
name = "contrib.go.opencensus.io/exporter/jaeger"
packages = ["."]
pruneopts = "UT"
revision = "540daef1da72376e9b3e1d52e4f90403d72f5c00"
version = "v0.2.0"
revision = "30c8b0fe8ad9d0eac5785893f3941b2e72c5aaaa"
version = "v0.2.1"
[[projects]]
digest = "1:4b96dcd8534bc6450a922bd16a76360ba3381f0d1daf40abbaec91c053fbfeb5"
@ -32,7 +32,23 @@
version = "v0.5.0"
[[projects]]
digest = "1:fd0a0705475581c7eb965259d417706cb49f42bde408502c3b53f139b7253d67"
digest = "1:4f726c47cabd8cf517114ff99d0bc16d23ae4e1cfe50c94986c57d90fc66a941"
name = "github.com/DataDog/datadog-go"
packages = ["statsd"]
pruneopts = "UT"
revision = "b5f99e5a502785e43356d1f710e8ae1ee948503b"
version = "v4.0.0"
[[projects]]
digest = "1:9370265bab17bdc207051ccedc34535484a12622a329839e580059c79236c1e3"
name = "github.com/GoogleCloudPlatform/microservices-demo"
packages = ["src/productcatalogservice/genproto"]
pruneopts = "UT"
revision = "c2095a7d4b8abd538251b705325d6a493a23e009"
version = "v0.2.0"
[[projects]]
digest = "1:9d2705f9d2e7da697c24b2ab104567b155107b2aad26ca615973c0a8f02f757a"
name = "github.com/golang/protobuf"
packages = [
"jsonpb",
@ -44,11 +60,11 @@
"ptypes/empty",
"ptypes/struct",
"ptypes/timestamp",
"ptypes/wrappers"
"ptypes/wrappers",
]
pruneopts = "UT"
revision = "b5d812f8a3706043e23a9cd5babf2e5423744d30"
version = "v1.3.1"
revision = "d04d7b157bb510b1e0c10132224b616ac0e26b17"
version = "v1.4.2"
[[projects]]
digest = "1:2e3c336fc7fde5c984d2841455a658a6d626450b1754a854b3b32e7a8f49a07a"
@ -57,7 +73,7 @@
"cmp",
"cmp/internal/diff",
"cmp/internal/function",
"cmp/internal/value"
"cmp/internal/value",
]
pruneopts = "UT"
revision = "3af367b6b30c263d47e8895973edcca9a49cf029"
@ -65,11 +81,19 @@
[[projects]]
branch = "master"
digest = "1:dcb1edb161b1b1cac9aedf2a17b9b2c7829e242624968875a3c1b97dd9f4ef00"
digest = "1:7f49181edc3aa34ec3145a0050ce4af901a9c3238774f362784ce39227bc1f3a"
name = "github.com/google/pprof"
packages = ["profile"]
pruneopts = "UT"
revision = "54271f7e092ff31b10b7626fee166cbc6304e350"
revision = "1a94d8640e99342fa76ae6296aaa921d08ac451f"
[[projects]]
digest = "1:582b704bebaa06b48c29b0cec224a6058a09c86883aaddabde889cd1a5f73e1b"
name = "github.com/google/uuid"
packages = ["."]
pruneopts = "UT"
revision = "0cd6bf5da1e1c83f8b45653022c74f71af0538a4"
version = "v1.1.1"
[[projects]]
digest = "1:766102087520f9d54f2acc72bd6637045900ac735b4a419b128d216f0c5c4876"
@ -80,33 +104,49 @@
version = "v2.0.5"
[[projects]]
digest = "1:31e761d97c76151dde79e9d28964a812c46efc5baee4085b86f68f0c654450de"
digest = "1:09cb61dc19af93deae01587e2fdb1c081e0bf48f1a5ad5fa24f48750dc57dce8"
name = "github.com/konsorten/go-windows-terminal-sequences"
packages = ["."]
pruneopts = "UT"
revision = "f55edac94c9bbba5d6182a4be46d86a2c9b5b50e"
version = "v1.0.2"
revision = "edb144dfd453055e1e49a3d8b410a660b5a87613"
version = "v1.0.3"
[[projects]]
digest = "1:04457f9f6f3ffc5fea48e71d62f2ca256637dee0a04d710288e27e05c8b41976"
digest = "1:5e73b34a27d827212102605789de00bd411b2e434812133c83935fe9897c75e1"
name = "github.com/philhofer/fwd"
packages = ["."]
pruneopts = "UT"
revision = "bb6d471dc95d4fe11e432687f8b70ff496cf3136"
version = "v1.0.0"
[[projects]]
digest = "1:05eebdd5727fea23083fce0d98d307d70c86baed644178e81608aaa9f09ea469"
name = "github.com/sirupsen/logrus"
packages = ["."]
pruneopts = "UT"
revision = "839c75faf7f98a33d445d181f3018b5c3409a45e"
version = "v1.4.2"
revision = "60c74ad9be0d874af0ab0daef6ab07c5c5911f0d"
version = "v1.6.0"
[[projects]]
digest = "1:be83cecd5ba066751e3f789c1faecf5a3229031c7986eb486f593a6e32446ac0"
digest = "1:6636bfca29dde8561c03e98ccddbe36240f13a01ac770d7ea07f4fd019ed6e65"
name = "github.com/tinylib/msgp"
packages = ["msgp"]
pruneopts = "UT"
revision = "4253cdaa5267687e3b7612da7ff105d4414174da"
version = "v1.1.2"
[[projects]]
digest = "1:a6175cb931f5b9da33e92f6057e0de28badbe6dfdc32f4bf378ffd9a2c461d03"
name = "github.com/uber/jaeger-client-go"
packages = [
"thrift",
"thrift-gen/agent",
"thrift-gen/jaeger",
"thrift-gen/zipkincore"
"thrift-gen/zipkincore",
]
pruneopts = "UT"
revision = "f2e1f58485aacf2975cdde9c9f5396e6d98c35ba"
version = "v2.21.1"
revision = "121ee6fb26fd9617fc30d0d95569a39c30ca3b76"
version = "v2.25.0"
[[projects]]
digest = "1:1bb914cfb78f68f488a91cd7872d3d06a5f83c5bbacf0296dbef44e120b00a91"
@ -125,7 +165,7 @@
"trace",
"trace/internal",
"trace/propagation",
"trace/tracestate"
"trace/tracestate",
]
pruneopts = "UT"
revision = "b11f239c032624b045c4c2bfd3d1287b4012ce89"
@ -133,7 +173,7 @@
[[projects]]
branch = "master"
digest = "1:2f357867bf425774d35beca5be718402a4488b8b23b1563ce8c5bb91d09285a7"
digest = "1:6a803f0f3ecbe7e804185a165b3e36eeb0a62f806e7fbe61e842966127991a64"
name = "golang.org/x/net"
packages = [
"context",
@ -143,43 +183,48 @@
"http2/hpack",
"idna",
"internal/timeseries",
"trace"
"trace",
]
pruneopts = "UT"
revision = "da137c7871d730100384dbcf36e6f8fa493aef5b"
revision = "c89045814202410a2d67ec20ecf177ec77ceae7f"
[[projects]]
branch = "master"
digest = "1:31e33f76456ccf54819ab4a646cf01271d1a99d7712ab84bf1a9e7b61cd2031b"
digest = "1:79edde3241bb55de9f4143d5083bfcff722e550c3cb8db94084eab50d0e440b5"
name = "golang.org/x/oauth2"
packages = [
".",
"google",
"internal",
"jws",
"jwt"
"jwt",
]
pruneopts = "UT"
revision = "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33"
revision = "bf48bf16ab8d622ce64ec6ce98d2c98f916b6303"
[[projects]]
branch = "master"
digest = "1:382bb5a7fb4034db3b6a2d19e5a4a6bcf52f4750530603c01ca18a172fa3089b"
digest = "1:4692f916cb72b2c295f04841036d85a3f13e96d1cc9e8e4c2c30edebac518053"
name = "golang.org/x/sync"
packages = ["semaphore"]
pruneopts = "UT"
revision = "112230192c580c3556b8cee6403af37a4fc5f28c"
revision = "6e8e738ad208923de99951fe0b48239bfd864f28"
[[projects]]
branch = "master"
digest = "1:730ba27cd66db3b98ec8f51a6f20d45ec277d490cca36b1f54e31d3fcaf4840e"
digest = "1:288524d218ffbd2adb8cf423f2afb863ccce0a000446a2b0d467931d1e517ba0"
name = "golang.org/x/sys"
packages = ["unix"]
packages = [
"internal/unsafeheader",
"unix",
"windows",
"windows/registry",
]
pruneopts = "UT"
revision = "04f50cda93cbb67f2afa353c52f342100e80e625"
revision = "c12d262b63d83031f2db2f528267f9a4f58e2775"
[[projects]]
digest = "1:8d8faad6b12a3a4c819a3f9618cb6ee1fa1cfc33253abeeea8b55336721e3405"
digest = "1:fa940333c48808b0d86ef21f412ffcfd0e5084a82f13905c028a404803b1908f"
name = "golang.org/x/text"
packages = [
"collate",
@ -197,15 +242,34 @@
"unicode/bidi",
"unicode/cldr",
"unicode/norm",
"unicode/rangetable"
"unicode/rangetable",
]
pruneopts = "UT"
revision = "342b2e1fbaa52c93f31447ad2c6abc048c63e475"
version = "v0.3.2"
revision = "23ae387dee1f90d29a23c0e87ee0b46038fbed0e"
version = "v0.3.3"
[[projects]]
branch = "master"
digest = "1:bc06b12d8436550fccc0212037e9281a7e4d53db25c2349eb3cc6c3457e0406b"
digest = "1:9a12483c63e8328a477280cd6855689af0f584eb580b66c0d113a1f5fe7791b0"
name = "golang.org/x/time"
packages = ["rate"]
pruneopts = "UT"
revision = "3af7569d3a1e776fc2a3c1cec133b43105ea9c2e"
[[projects]]
branch = "master"
digest = "1:918a46e4a2fb83df33f668f5a6bd51b2996775d073fce1800d3ec01b0a5ddd2b"
name = "golang.org/x/xerrors"
packages = [
".",
"internal",
]
pruneopts = "UT"
revision = "5ec99f83aff198f5fbd629d6c8d8eb38a04218ca"
[[projects]]
branch = "master"
digest = "1:49329e5d3d686037e3255b4d555f3751d275771cb3e60f6fe6cfa47abf90110f"
name = "google.golang.org/api"
packages = [
"googleapi/transport",
@ -214,15 +278,16 @@
"option",
"support/bundler",
"transport",
"transport/cert",
"transport/grpc",
"transport/http",
"transport/http/internal/propagation"
"transport/http/internal/propagation",
]
pruneopts = "UT"
revision = "aae1d1b89c27132abe4fa22731a2a61e7089079c"
revision = "b77a6912936dced70abf0869ccb1d02d802567de"
[[projects]]
digest = "1:2c26b1c47556c0e5e73cdb05d8361c463737eee4baac35d38b40c728c3074a94"
digest = "1:9a3c550c85a5a62ccc4cadd8525497b99554094a1adecc560c97bebc231ca81b"
name = "google.golang.org/appengine"
packages = [
".",
@ -236,15 +301,15 @@
"internal/socket",
"internal/urlfetch",
"socket",
"urlfetch"
"urlfetch",
]
pruneopts = "UT"
revision = "b2f4a3cf3c67576a2ee09e1fe62656a5086ce880"
version = "v1.6.1"
revision = "553959209a20f3be281c16dd5be5c740a893978f"
version = "v1.6.6"
[[projects]]
branch = "master"
digest = "1:cb0f37e3cdf50a27abbf33a48797b30786239d4fd69dbfbbc63cfa19d400d3ce"
digest = "1:03c2b11b1e1f705b0f5cfc21a5e2b3e0e71456173cd52591c7478b3d1f2c9792"
name = "google.golang.org/genproto"
packages = [
"googleapis/api",
@ -258,20 +323,24 @@
"googleapis/monitoring/v3",
"googleapis/rpc/errdetails",
"googleapis/rpc/status",
"protobuf/field_mask"
"googleapis/type/calendarperiod",
"protobuf/field_mask",
]
pruneopts = "UT"
revision = "3bdd9d9f5532d75d09efb230bd767d265245cfe5"
revision = "f69a88009b70a94c67e3910bf1663f5df9fbfc6d"
[[projects]]
digest = "1:f379776e36e55e5b5cbf7187ea58280812785071de53046230006e47894650b6"
digest = "1:92f84847381cc2ee44933fa3cfd6d6f669596db21a22e122441ea6b8358afe3d"
name = "google.golang.org/grpc"
packages = [
".",
"attributes",
"backoff",
"balancer",
"balancer/base",
"balancer/grpclb",
"balancer/grpclb/grpc_lb_v1",
"balancer/grpclb/state",
"balancer/roundrobin",
"binarylog/grpc_binarylog_v1",
"codes",
@ -295,27 +364,96 @@
"internal/backoff",
"internal/balancerload",
"internal/binarylog",
"internal/buffer",
"internal/channelz",
"internal/credentials",
"internal/envconfig",
"internal/grpclog",
"internal/grpcrand",
"internal/grpcsync",
"internal/grpcutil",
"internal/resolver/dns",
"internal/resolver/passthrough",
"internal/serviceconfig",
"internal/status",
"internal/syscall",
"internal/transport",
"keepalive",
"metadata",
"naming",
"peer",
"resolver",
"resolver/dns",
"resolver/passthrough",
"serviceconfig",
"stats",
"status",
"tap"
"tap",
]
pruneopts = "UT"
revision = "1d89a3c832915b2314551c1d2a506874d62e53f7"
version = "v1.22.0"
revision = "bde0263672f027525e2950992a4c7db7af572b59"
version = "v1.31.0"
[[projects]]
digest = "1:4a0202ad403c5a9c79ae7d6673aabb8e4ae2163654167229a49cc0155687effa"
name = "google.golang.org/protobuf"
packages = [
"encoding/protojson",
"encoding/prototext",
"encoding/protowire",
"internal/descfmt",
"internal/descopts",
"internal/detrand",
"internal/encoding/defval",
"internal/encoding/json",
"internal/encoding/messageset",
"internal/encoding/tag",
"internal/encoding/text",
"internal/errors",
"internal/fieldsort",
"internal/filedesc",
"internal/filetype",
"internal/flags",
"internal/genid",
"internal/impl",
"internal/mapsort",
"internal/pragma",
"internal/set",
"internal/strs",
"internal/version",
"proto",
"reflect/protoreflect",
"reflect/protoregistry",
"runtime/protoiface",
"runtime/protoimpl",
"types/descriptorpb",
"types/known/anypb",
"types/known/durationpb",
"types/known/emptypb",
"types/known/fieldmaskpb",
"types/known/structpb",
"types/known/timestamppb",
"types/known/wrapperspb",
]
pruneopts = "UT"
revision = "3f7a61f89bb6813f89d981d1870ed68da0b3c3f1"
version = "v1.25.0"
[[projects]]
digest = "1:c4d5c7382aa68038f57265590b6025bebb3d41fdd66bc8474f0644b422130890"
name = "gopkg.in/DataDog/dd-trace-go.v1"
packages = [
"contrib/google.golang.org/grpc",
"contrib/google.golang.org/internal/grpcutil",
"ddtrace",
"ddtrace/ext",
"ddtrace/internal",
"ddtrace/tracer",
"internal",
"internal/globalconfig",
"internal/log",
"internal/version",
]
pruneopts = "UT"
revision = "6d7c52cd8ab1ea309fd54c1a2ef472fadb84429c"
version = "v1.26.0"
[solve-meta]
analyzer-name = "dep"
@ -324,6 +462,7 @@
"cloud.google.com/go/profiler",
"contrib.go.opencensus.io/exporter/jaeger",
"contrib.go.opencensus.io/exporter/stackdriver",
"github.com/GoogleCloudPlatform/microservices-demo/src/productcatalogservice/genproto",
"github.com/golang/protobuf/jsonpb",
"github.com/golang/protobuf/proto",
"github.com/google/go-cmp/cmp",
@ -335,7 +474,9 @@
"google.golang.org/grpc",
"google.golang.org/grpc/codes",
"google.golang.org/grpc/health/grpc_health_v1",
"google.golang.org/grpc/status"
"google.golang.org/grpc/status",
"gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc",
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer",
]
solver-name = "gps-cdcl"
solver-version = 1

View file

@ -28,6 +28,8 @@ import (
"syscall"
"time"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
gt "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc"
pb "github.com/GoogleCloudPlatform/microservices-demo/src/productcatalogservice/genproto"
healthpb "google.golang.org/grpc/health/grpc_health_v1"
@ -75,6 +77,11 @@ func init() {
}
func main() {
tracer.Start(
tracer.WithEnv("prod"),
tracer.WithService("productcatalogservice"),
)
defer tracer.Stop()
if os.Getenv("DISABLE_TRACING") == "" {
log.Info("Tracing enabled.")
go initTracing()
@ -136,9 +143,18 @@ func run(port string) string {
if os.Getenv("DISABLE_STATS") == "" {
log.Info("Stats enabled.")
srv = grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{}))
} else if os.Getenv("DATADOG_APM_ENABLED") == "true" {
log.Info("Datadog trace enabled.")
// Create the server interceptor using the grpc trace package.
grpc_option := gt.WithServiceName(os.Getenv("DD_SERVICE"))
unary_server_trace := gt.UnaryServerInterceptor(grpc_option)
stream_server_trace := gt.StreamServerInterceptor(grpc_option)
unary_trace := grpc.UnaryInterceptor(unary_server_trace)
stream_trace := grpc.StreamInterceptor(stream_server_trace)
srv = grpc.NewServer(unary_trace, stream_trace)
} else {
log.Info("Stats disabled.")
srv = grpc.NewServer()
srv = grpc.NewServer()
}
svc := &productCatalog{}

View file

@ -36,4 +36,4 @@ COPY . .
ENV PORT "8080"
EXPOSE 8080
ENTRYPOINT ["python", "/recommendationservice/recommendation_server.py"]
ENTRYPOINT ["ddtrace-run", "python", "/recommendationservice/recommendation_server.py"]

View file

@ -38,6 +38,9 @@ from grpc_health.v1 import health_pb2_grpc
from logger import getJSONLogger
logger = getJSONLogger('recommendationservice-server')
from ddtrace import patch_all
patch_all()
def initStackdriverProfiling():
project_id = None
try:

View file

@ -1,7 +1,8 @@
google-api-core==1.6.0
google-python-cloud-debugger==2.9
google-python-cloud-debugger==2.15
grpcio-health-checking==1.13.0
grpcio==1.16.1
opencensus[stackdriver]==0.1.10
python-json-logger==0.1.9
google-cloud-profiler==1.0.8
ddtrace

View file

@ -34,3 +34,4 @@ rsa==4.0 # via google-auth
six==1.12.0 # via google-api-core, google-api-python-client, google-auth, google-python-cloud-debugger, grpcio, protobuf
uritemplate==3.0.0 # via google-api-python-client
urllib3==1.24.2 # via requests
ddtrace

View file

@ -9,19 +9,19 @@
"internal/version",
"monitoring/apiv3",
"profiler",
"trace/apiv2"
"trace/apiv2",
]
pruneopts = "UT"
revision = "457ea5c15ccf3b87db582c450e80101989da35f7"
version = "v0.40.0"
[[projects]]
digest = "1:bcd1b2dd631e720b6129e801bf0766c50fb4d39455c0a255047e8fc71c31152f"
digest = "1:5baabd5f5d47219f2bbcd130b61376e1b2e641e0826157b017dab3f88f018827"
name = "contrib.go.opencensus.io/exporter/jaeger"
packages = ["."]
pruneopts = "UT"
revision = "540daef1da72376e9b3e1d52e4f90403d72f5c00"
version = "v0.2.0"
revision = "30c8b0fe8ad9d0eac5785893f3941b2e72c5aaaa"
version = "v0.2.1"
[[projects]]
digest = "1:4b96dcd8534bc6450a922bd16a76360ba3381f0d1daf40abbaec91c053fbfeb5"
@ -32,18 +32,26 @@
version = "v0.5.0"
[[projects]]
branch = "master"
digest = "1:a85b0dc359de4812d383ee6670f0dae595cfcb8b13ff6b872bdb013a18c37b07"
name = "git.apache.org/thrift.git"
packages = ["lib/go/thrift"]
digest = "1:4f726c47cabd8cf517114ff99d0bc16d23ae4e1cfe50c94986c57d90fc66a941"
name = "github.com/DataDog/datadog-go"
packages = ["statsd"]
pruneopts = "UT"
revision = "286eee16b147a302ddc7b10740c5e5401ebbec17"
source = "github.com/apache/thrift"
revision = "b5f99e5a502785e43356d1f710e8ae1ee948503b"
version = "v4.0.0"
[[projects]]
digest = "1:1d3ad0f6a57c08e2168089a64c34313930571fcbe5359d71c608a97ce504f7ca"
digest = "1:f47f56c0975afe777b239cc03631011db2667a51e59b177bf318748724d4455b"
name = "github.com/GoogleCloudPlatform/microservices-demo"
packages = ["src/shippingservice/genproto"]
pruneopts = "UT"
revision = "c2095a7d4b8abd538251b705325d6a493a23e009"
version = "v0.2.0"
[[projects]]
digest = "1:9d2705f9d2e7da697c24b2ab104567b155107b2aad26ca615973c0a8f02f757a"
name = "github.com/golang/protobuf"
packages = [
"jsonpb",
"proto",
"protoc-gen-go/descriptor",
"ptypes",
@ -52,19 +60,41 @@
"ptypes/empty",
"ptypes/struct",
"ptypes/timestamp",
"ptypes/wrappers"
"ptypes/wrappers",
]
pruneopts = "UT"
revision = "b5d812f8a3706043e23a9cd5babf2e5423744d30"
version = "v1.3.1"
revision = "d04d7b157bb510b1e0c10132224b616ac0e26b17"
version = "v1.4.2"
[[projects]]
digest = "1:85af59d73a44bd58f524cf05dee34a5021afe1fa4a852079b535c38ae2d1a2e8"
name = "github.com/google/go-cmp"
packages = [
"cmp",
"cmp/internal/diff",
"cmp/internal/flags",
"cmp/internal/function",
"cmp/internal/value",
]
pruneopts = "UT"
revision = "9680bfaf28748393e28e00238d94070fb9972fd8"
version = "v0.5.1"
[[projects]]
branch = "master"
digest = "1:dcb1edb161b1b1cac9aedf2a17b9b2c7829e242624968875a3c1b97dd9f4ef00"
digest = "1:7f49181edc3aa34ec3145a0050ce4af901a9c3238774f362784ce39227bc1f3a"
name = "github.com/google/pprof"
packages = ["profile"]
pruneopts = "UT"
revision = "54271f7e092ff31b10b7626fee166cbc6304e350"
revision = "1a94d8640e99342fa76ae6296aaa921d08ac451f"
[[projects]]
digest = "1:582b704bebaa06b48c29b0cec224a6058a09c86883aaddabde889cd1a5f73e1b"
name = "github.com/google/uuid"
packages = ["."]
pruneopts = "UT"
revision = "0cd6bf5da1e1c83f8b45653022c74f71af0538a4"
version = "v1.1.1"
[[projects]]
digest = "1:766102087520f9d54f2acc72bd6637045900ac735b4a419b128d216f0c5c4876"
@ -75,41 +105,55 @@
version = "v2.0.5"
[[projects]]
digest = "1:31e761d97c76151dde79e9d28964a812c46efc5baee4085b86f68f0c654450de"
digest = "1:09cb61dc19af93deae01587e2fdb1c081e0bf48f1a5ad5fa24f48750dc57dce8"
name = "github.com/konsorten/go-windows-terminal-sequences"
packages = ["."]
pruneopts = "UT"
revision = "f55edac94c9bbba5d6182a4be46d86a2c9b5b50e"
version = "v1.0.2"
revision = "edb144dfd453055e1e49a3d8b410a660b5a87613"
version = "v1.0.3"
[[projects]]
digest = "1:04457f9f6f3ffc5fea48e71d62f2ca256637dee0a04d710288e27e05c8b41976"
digest = "1:5e73b34a27d827212102605789de00bd411b2e434812133c83935fe9897c75e1"
name = "github.com/philhofer/fwd"
packages = ["."]
pruneopts = "UT"
revision = "bb6d471dc95d4fe11e432687f8b70ff496cf3136"
version = "v1.0.0"
[[projects]]
digest = "1:05eebdd5727fea23083fce0d98d307d70c86baed644178e81608aaa9f09ea469"
name = "github.com/sirupsen/logrus"
packages = ["."]
pruneopts = "UT"
revision = "839c75faf7f98a33d445d181f3018b5c3409a45e"
version = "v1.4.2"
revision = "60c74ad9be0d874af0ab0daef6ab07c5c5911f0d"
version = "v1.6.0"
[[projects]]
digest = "1:be83cecd5ba066751e3f789c1faecf5a3229031c7986eb486f593a6e32446ac0"
digest = "1:6636bfca29dde8561c03e98ccddbe36240f13a01ac770d7ea07f4fd019ed6e65"
name = "github.com/tinylib/msgp"
packages = ["msgp"]
pruneopts = "UT"
revision = "4253cdaa5267687e3b7612da7ff105d4414174da"
version = "v1.1.2"
[[projects]]
digest = "1:a6175cb931f5b9da33e92f6057e0de28badbe6dfdc32f4bf378ffd9a2c461d03"
name = "github.com/uber/jaeger-client-go"
packages = [
"thrift",
"thrift-gen/agent",
"thrift-gen/jaeger",
"thrift-gen/zipkincore"
"thrift-gen/zipkincore",
]
pruneopts = "UT"
revision = "f2e1f58485aacf2975cdde9c9f5396e6d98c35ba"
version = "v2.21.1"
revision = "121ee6fb26fd9617fc30d0d95569a39c30ca3b76"
version = "v2.25.0"
[[projects]]
digest = "1:a5154dfd6b37bef5a3eab759e13296348e639dc8c7604f538368167782b08ccd"
digest = "1:1bb914cfb78f68f488a91cd7872d3d06a5f83c5bbacf0296dbef44e120b00a91"
name = "go.opencensus.io"
packages = [
".",
"exporter/jaeger",
"exporter/jaeger/internal/gen-go/jaeger",
"internal",
"internal/tagencoding",
"plugin/ocgrpc",
@ -122,7 +166,7 @@
"trace",
"trace/internal",
"trace/propagation",
"trace/tracestate"
"trace/tracestate",
]
pruneopts = "UT"
revision = "b11f239c032624b045c4c2bfd3d1287b4012ce89"
@ -130,7 +174,7 @@
[[projects]]
branch = "master"
digest = "1:2f357867bf425774d35beca5be718402a4488b8b23b1563ce8c5bb91d09285a7"
digest = "1:6a803f0f3ecbe7e804185a165b3e36eeb0a62f806e7fbe61e842966127991a64"
name = "golang.org/x/net"
packages = [
"context",
@ -140,43 +184,48 @@
"http2/hpack",
"idna",
"internal/timeseries",
"trace"
"trace",
]
pruneopts = "UT"
revision = "da137c7871d730100384dbcf36e6f8fa493aef5b"
revision = "c89045814202410a2d67ec20ecf177ec77ceae7f"
[[projects]]
branch = "master"
digest = "1:31e33f76456ccf54819ab4a646cf01271d1a99d7712ab84bf1a9e7b61cd2031b"
digest = "1:79edde3241bb55de9f4143d5083bfcff722e550c3cb8db94084eab50d0e440b5"
name = "golang.org/x/oauth2"
packages = [
".",
"google",
"internal",
"jws",
"jwt"
"jwt",
]
pruneopts = "UT"
revision = "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33"
revision = "bf48bf16ab8d622ce64ec6ce98d2c98f916b6303"
[[projects]]
branch = "master"
digest = "1:382bb5a7fb4034db3b6a2d19e5a4a6bcf52f4750530603c01ca18a172fa3089b"
digest = "1:4692f916cb72b2c295f04841036d85a3f13e96d1cc9e8e4c2c30edebac518053"
name = "golang.org/x/sync"
packages = ["semaphore"]
pruneopts = "UT"
revision = "112230192c580c3556b8cee6403af37a4fc5f28c"
revision = "6e8e738ad208923de99951fe0b48239bfd864f28"
[[projects]]
branch = "master"
digest = "1:730ba27cd66db3b98ec8f51a6f20d45ec277d490cca36b1f54e31d3fcaf4840e"
digest = "1:c31c46ce6a973e860a444a8a64bd56e88fa83fbbf8791f4aab48d2da878de732"
name = "golang.org/x/sys"
packages = ["unix"]
packages = [
"internal/unsafeheader",
"unix",
"windows",
"windows/registry",
]
pruneopts = "UT"
revision = "04f50cda93cbb67f2afa353c52f342100e80e625"
revision = "fda516888d292084949c284313e463073fc40876"
[[projects]]
digest = "1:8d8faad6b12a3a4c819a3f9618cb6ee1fa1cfc33253abeeea8b55336721e3405"
digest = "1:fa940333c48808b0d86ef21f412ffcfd0e5084a82f13905c028a404803b1908f"
name = "golang.org/x/text"
packages = [
"collate",
@ -194,15 +243,34 @@
"unicode/bidi",
"unicode/cldr",
"unicode/norm",
"unicode/rangetable"
"unicode/rangetable",
]
pruneopts = "UT"
revision = "342b2e1fbaa52c93f31447ad2c6abc048c63e475"
version = "v0.3.2"
revision = "23ae387dee1f90d29a23c0e87ee0b46038fbed0e"
version = "v0.3.3"
[[projects]]
branch = "master"
digest = "1:bc06b12d8436550fccc0212037e9281a7e4d53db25c2349eb3cc6c3457e0406b"
digest = "1:9a12483c63e8328a477280cd6855689af0f584eb580b66c0d113a1f5fe7791b0"
name = "golang.org/x/time"
packages = ["rate"]
pruneopts = "UT"
revision = "3af7569d3a1e776fc2a3c1cec133b43105ea9c2e"
[[projects]]
branch = "master"
digest = "1:918a46e4a2fb83df33f668f5a6bd51b2996775d073fce1800d3ec01b0a5ddd2b"
name = "golang.org/x/xerrors"
packages = [
".",
"internal",
]
pruneopts = "UT"
revision = "5ec99f83aff198f5fbd629d6c8d8eb38a04218ca"
[[projects]]
branch = "master"
digest = "1:915974b5a6bab2524bb29da168f660beef91eb5cdb314d4e23392f61b9d3956f"
name = "google.golang.org/api"
packages = [
"googleapi/transport",
@ -211,15 +279,16 @@
"option",
"support/bundler",
"transport",
"transport/cert",
"transport/grpc",
"transport/http",
"transport/http/internal/propagation"
"transport/http/internal/propagation",
]
pruneopts = "UT"
revision = "aae1d1b89c27132abe4fa22731a2a61e7089079c"
revision = "2560edae6c50e363c98be06e7c2ce2dcb393aa63"
[[projects]]
digest = "1:2c26b1c47556c0e5e73cdb05d8361c463737eee4baac35d38b40c728c3074a94"
digest = "1:9a3c550c85a5a62ccc4cadd8525497b99554094a1adecc560c97bebc231ca81b"
name = "google.golang.org/appengine"
packages = [
".",
@ -233,15 +302,15 @@
"internal/socket",
"internal/urlfetch",
"socket",
"urlfetch"
"urlfetch",
]
pruneopts = "UT"
revision = "b2f4a3cf3c67576a2ee09e1fe62656a5086ce880"
version = "v1.6.1"
revision = "553959209a20f3be281c16dd5be5c740a893978f"
version = "v1.6.6"
[[projects]]
branch = "master"
digest = "1:cb0f37e3cdf50a27abbf33a48797b30786239d4fd69dbfbbc63cfa19d400d3ce"
digest = "1:03c2b11b1e1f705b0f5cfc21a5e2b3e0e71456173cd52591c7478b3d1f2c9792"
name = "google.golang.org/genproto"
packages = [
"googleapis/api",
@ -255,20 +324,24 @@
"googleapis/monitoring/v3",
"googleapis/rpc/errdetails",
"googleapis/rpc/status",
"protobuf/field_mask"
"googleapis/type/calendarperiod",
"protobuf/field_mask",
]
pruneopts = "UT"
revision = "3bdd9d9f5532d75d09efb230bd767d265245cfe5"
revision = "f69a88009b70a94c67e3910bf1663f5df9fbfc6d"
[[projects]]
digest = "1:c68a5ee8060d988d82cd42bf0a53f5ec24d40ea20d341346b26dbf74b1d95a1c"
digest = "1:20f515b65fd0981c979f7f329677add92a6fc0f36c87d2ef07f664a43636a2ac"
name = "google.golang.org/grpc"
packages = [
".",
"attributes",
"backoff",
"balancer",
"balancer/base",
"balancer/grpclb",
"balancer/grpclb/grpc_lb_v1",
"balancer/grpclb/state",
"balancer/roundrobin",
"binarylog/grpc_binarylog_v1",
"codes",
@ -292,29 +365,98 @@
"internal/backoff",
"internal/balancerload",
"internal/binarylog",
"internal/buffer",
"internal/channelz",
"internal/credentials",
"internal/envconfig",
"internal/grpclog",
"internal/grpcrand",
"internal/grpcsync",
"internal/grpcutil",
"internal/resolver/dns",
"internal/resolver/passthrough",
"internal/serviceconfig",
"internal/status",
"internal/syscall",
"internal/transport",
"keepalive",
"metadata",
"naming",
"peer",
"reflection",
"reflection/grpc_reflection_v1alpha",
"resolver",
"resolver/dns",
"resolver/passthrough",
"serviceconfig",
"stats",
"status",
"tap"
"tap",
]
pruneopts = "UT"
revision = "1d89a3c832915b2314551c1d2a506874d62e53f7"
version = "v1.22.0"
revision = "bde0263672f027525e2950992a4c7db7af572b59"
version = "v1.31.0"
[[projects]]
digest = "1:4a0202ad403c5a9c79ae7d6673aabb8e4ae2163654167229a49cc0155687effa"
name = "google.golang.org/protobuf"
packages = [
"encoding/protojson",
"encoding/prototext",
"encoding/protowire",
"internal/descfmt",
"internal/descopts",
"internal/detrand",
"internal/encoding/defval",
"internal/encoding/json",
"internal/encoding/messageset",
"internal/encoding/tag",
"internal/encoding/text",
"internal/errors",
"internal/fieldsort",
"internal/filedesc",
"internal/filetype",
"internal/flags",
"internal/genid",
"internal/impl",
"internal/mapsort",
"internal/pragma",
"internal/set",
"internal/strs",
"internal/version",
"proto",
"reflect/protoreflect",
"reflect/protoregistry",
"runtime/protoiface",
"runtime/protoimpl",
"types/descriptorpb",
"types/known/anypb",
"types/known/durationpb",
"types/known/emptypb",
"types/known/fieldmaskpb",
"types/known/structpb",
"types/known/timestamppb",
"types/known/wrapperspb",
]
pruneopts = "UT"
revision = "3f7a61f89bb6813f89d981d1870ed68da0b3c3f1"
version = "v1.25.0"
[[projects]]
digest = "1:c4d5c7382aa68038f57265590b6025bebb3d41fdd66bc8474f0644b422130890"
name = "gopkg.in/DataDog/dd-trace-go.v1"
packages = [
"contrib/google.golang.org/grpc",
"contrib/google.golang.org/internal/grpcutil",
"ddtrace",
"ddtrace/ext",
"ddtrace/internal",
"ddtrace/tracer",
"internal",
"internal/globalconfig",
"internal/log",
"internal/version",
]
pruneopts = "UT"
revision = "6d7c52cd8ab1ea309fd54c1a2ef472fadb84429c"
version = "v1.26.0"
[solve-meta]
analyzer-name = "dep"
@ -323,9 +465,9 @@
"cloud.google.com/go/profiler",
"contrib.go.opencensus.io/exporter/jaeger",
"contrib.go.opencensus.io/exporter/stackdriver",
"github.com/GoogleCloudPlatform/microservices-demo/src/shippingservice/genproto",
"github.com/golang/protobuf/proto",
"github.com/sirupsen/logrus",
"go.opencensus.io/exporter/jaeger",
"go.opencensus.io/plugin/ocgrpc",
"go.opencensus.io/stats/view",
"go.opencensus.io/trace",
@ -334,7 +476,9 @@
"google.golang.org/grpc/codes",
"google.golang.org/grpc/health/grpc_health_v1",
"google.golang.org/grpc/reflection",
"google.golang.org/grpc/status"
"google.golang.org/grpc/status",
"gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc",
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer",
]
solver-name = "gps-cdcl"
solver-version = 1

View file

@ -32,7 +32,8 @@ import (
"google.golang.org/grpc/codes"
"google.golang.org/grpc/reflection"
"google.golang.org/grpc/status"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
gt "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc"
pb "github.com/GoogleCloudPlatform/microservices-demo/src/shippingservice/genproto"
healthpb "google.golang.org/grpc/health/grpc_health_v1"
)
@ -58,6 +59,13 @@ func init() {
}
func main() {
tracer.Start(
tracer.WithEnv("prod"),
tracer.WithService("shippingservice"),
)
defer tracer.Stop()
if os.Getenv("DISABLE_TRACING") == "" {
log.Info("Tracing enabled.")
go initTracing()
@ -84,13 +92,24 @@ func main() {
}
var srv *grpc.Server
// Default stats/traces enabled
if os.Getenv("DISABLE_STATS") == "" {
log.Info("Stats enabled.")
srv = grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{}))
} else if os.Getenv("DATADOG_APM_ENABLED") == "true" { //datadog traces enabled
// Create the server interceptor using the grpc trace package.
log.Info("Datadog tracing enabled.")
grpc_option := gt.WithServiceName(os.Getenv("DD_SERVICE"))
unary_server_trace := gt.UnaryServerInterceptor(grpc_option)
stream_server_trace := gt.StreamServerInterceptor(grpc_option)
unary_trace := grpc.UnaryInterceptor(unary_server_trace)
stream_trace := grpc.StreamInterceptor(stream_server_trace)
srv = grpc.NewServer(unary_trace, stream_trace)
} else {
log.Info("Stats disabled.")
srv = grpc.NewServer()
log.Info("Stats disabled.")
srv = grpc.NewServer()
}
svc := &server{}
pb.RegisterShippingServiceServer(srv, svc)
healthpb.RegisterHealthServer(srv, svc)