File tree 20 files changed +45118
-0
lines changed
20 files changed +45118
-0
lines changed Original file line number Diff line number Diff line change
1
+ # Image info
2
+ IMAGE_VERSION = 0.1.0
3
+ IMAGE_NAME = otel-target-allocator-talk
4
+
5
+ CONTEXT = ./src/python
Original file line number Diff line number Diff line change
1
+ venv *
2
+ pyenv.cfg
3
+ * example *
4
+ .DS_Store
5
+ otelcol-config-extras * .yml
Original file line number Diff line number Diff line change 1
1
# otel-target-allocator-talk
2
+
3
+ ## Installation
4
+
5
+ ### 1- Install KinD and set up k8s cluster
6
+
7
+ The scripts below will install KinD, and then will install the following in the newly-created cluster:
8
+
9
+ * the ` PodMonitor ` and ` ServiceMonitor ` Prometheus CRs
10
+ * ` cert-manager ` (an OTel Operator pre-requisite)
11
+ * the OTel Operator.
12
+
13
+ ``` bash
14
+ ./src/scripts/01-install-kind.sh
15
+ ./src/scripts/02-k8s-setup.sh
16
+ ```
17
+
18
+ ### 2- Build and deploy image
19
+
20
+ Build Docker image and deploy to KinD
21
+
22
+ ``` bash
23
+ ./src/scripts/03-build-and-deploy-images.sh
24
+ ```
25
+
26
+ ### 3- Kubernetes deployment
27
+
28
+ Deploy Kubernetes resources
29
+
30
+ ``` bash
31
+ ./src/scripts/04-deploy-resources.sh
32
+ ```
Original file line number Diff line number Diff line change
1
+ version : ' 0.1'
2
+ x-default-logging : &logging
3
+ options :
4
+ max-size : " 5m"
5
+ max-file : " 2"
6
+
7
+ networks :
8
+ default :
9
+ name : otel-lab
10
+ driver : bridge
11
+
12
+ services :
13
+
14
+ py-ta-example :
15
+ container_name : py-ta-example
16
+ image : ${IMAGE_NAME}:${IMAGE_VERSION}-py-ta-example
17
+ build :
18
+ context : ${CONTEXT}
19
+ dockerfile : Dockerfile.app
20
+ ports :
21
+ - " 8080:8080"
22
+ # environment:
23
+ # - OTEL_RESOURCE_ATTRIBUTES=service.name=py-ta-example,service.version=0.1.0
24
+ stop_grace_period : 1s
25
+
26
+ # py-otel-client:
27
+ # container_name: py-otel-client
28
+ # image: ${IMAGE_NAME}:${IMAGE_VERSION}-py-otel-client
29
+ # build:
30
+ # context: ${CONTEXT}
31
+ # dockerfile: Dockerfile.client
32
+ # depends_on:
33
+ # py-otel-server:
34
+ # condition: service_started
35
+ # environment:
36
+ # - DESTINATION_URL=http://py-otel-server:8082/rolldice
37
+ # stop_grace_period: 1s
38
+ # py-otel-server:
39
+ # container_name: py-otel-server
40
+ # image: ${IMAGE_NAME}:${IMAGE_VERSION}-py-otel-server
41
+ # build:
42
+ # context: ${CONTEXT}
43
+ # dockerfile: Dockerfile.server
44
+ # ports:
45
+ # - "8082:8082"
46
+ # environment:
47
+ # - OTEL_RESOURCE_ATTRIBUTES=service.name=py-otel-server,service.version=0.1.0
48
+ # stop_grace_period: 1s
Original file line number Diff line number Diff line change
1
+ FROM python:3.10-slim
2
+
3
+ EXPOSE 8080
4
+
5
+ WORKDIR /app
6
+ COPY ./requirements.txt ./app.py .
7
+ RUN pip3 install -r ./requirements.txt
8
+
9
+ CMD ["python", "app.py"]
Original file line number Diff line number Diff line change
1
+ # Python App
2
+
3
+ ## Setup
4
+
5
+ Set up the Python environment
6
+
7
+ ``` bash
8
+ python3 -m venv src/python/venv
9
+ source src/python/venv/bin/activate
10
+
11
+ pip install --upgrade pip
12
+
13
+ # Installs dependencies
14
+ pip install -r solution/python/requirements.txt
15
+ # opentelemetry-bootstrap -a install
16
+ ```
17
+
Original file line number Diff line number Diff line change
1
+ import random
2
+ import time
3
+ from prometheus_client import start_http_server , Counter
4
+
5
+ some_counter = Counter (name = "some_counter" , documentation = "Sample counter" )
6
+
7
+ def main () -> None :
8
+ while True :
9
+ random_sleep_time = random .randint (1 , 20 )
10
+ print (f"Sleeping for { random_sleep_time } seconds" , flush = True )
11
+ time .sleep (random_sleep_time )
12
+ some_counter .inc ()
13
+
14
+ if __name__ == "__main__" :
15
+ start_http_server (port = 8080 )
16
+ main ()
Original file line number Diff line number Diff line change
1
+ prometheus_client == 0.20.0
Original file line number Diff line number Diff line change
1
+ ---
2
+ apiVersion : v1
3
+ kind : Namespace
4
+ metadata :
5
+ name : application
6
+
7
+ ---
8
+ apiVersion : apps/v1
9
+ kind : Deployment
10
+ metadata :
11
+ name : py-otel-server
12
+ namespace : application
13
+ labels :
14
+ app : py-otel-server
15
+ app.kubernetes.io/name : py-otel-server
16
+ spec :
17
+ replicas : 1
18
+ selector :
19
+ matchLabels :
20
+ app : py-otel-server
21
+ app.kubernetes.io/name : py-otel-server
22
+ template :
23
+ metadata :
24
+ labels :
25
+ app : py-otel-server
26
+ app.kubernetes.io/name : py-otel-server
27
+ spec :
28
+ containers :
29
+ - name : py-otel-server
30
+ image : otel-python-lab:0.1.0-py-otel-server
31
+ # image: docker.io/library/otel-python-lab:0.1.0-py-otel-server
32
+ imagePullPolicy : Never
33
+ ports :
34
+ - containerPort : 8082
35
+ name : py-server-port
36
+ env :
37
+ - name : OTEL_RESOURCE_ATTRIBUTES
38
+ value : service.name=py-otel-server,service.version=0.1.0
39
+
40
+ ---
41
+ apiVersion : v1
42
+ kind : Service
43
+ metadata :
44
+ name : py-otel-server-svc
45
+ namespace : application
46
+ labels :
47
+ app : py-otel-server
48
+ app.kubernetes.io/name : py-otel-server
49
+ spec :
50
+ selector :
51
+ app.kubernetes.io/name : py-otel-server
52
+ ports :
53
+ - name : py-server-port
54
+ protocol : TCP
55
+ port : 8082
56
+ targetPort : py-server-port
Original file line number Diff line number Diff line change
1
+ ---
2
+ apiVersion : v1
3
+ kind : Namespace
4
+ metadata :
5
+ name : opentelemetry
6
+
7
+ ---
8
+ apiVersion : apps/v1
9
+ kind : Deployment
10
+ metadata :
11
+ name : my-app
12
+ namespace : opentelemetry
13
+ spec :
14
+ replicas : 1
15
+ selector :
16
+ matchLabels :
17
+ app : my-app
18
+ template :
19
+ metadata :
20
+ labels :
21
+ app : my-app
22
+ spec :
23
+ containers :
24
+ - name : my-app
25
+ image : otel-target-allocator-talk:0.1.0-py-ta-example
26
+ imagePullPolicy : Always
27
+ ports :
28
+ - name : prom
29
+ containerPort : 8080
30
+ ---
31
+ apiVersion : v1
32
+ kind : Service
33
+ metadata :
34
+ name : my-app
35
+ namespace : opentelemetry
36
+ labels :
37
+ app : my-app
38
+ spec :
39
+ selector :
40
+ app : my-app
41
+ ports :
42
+ - name : prom
43
+ port : 8080
Original file line number Diff line number Diff line change
1
+ apiVersion : v1
2
+ kind : ServiceAccount
3
+ metadata :
4
+ name : otelcol
5
+ namespace : opentelemetry
6
+ ---
7
+ apiVersion : rbac.authorization.k8s.io/v1
8
+ kind : ClusterRole
9
+ metadata :
10
+ name : opentelemetry-targetallocator-cr-role
11
+ namespace : opentelemetry
12
+ rules :
13
+ - apiGroups :
14
+ - monitoring.coreos.com
15
+ resources :
16
+ - servicemonitors
17
+ - podmonitors
18
+ verbs :
19
+ - ' *'
20
+ ---
21
+ apiVersion : rbac.authorization.k8s.io/v1
22
+ kind : ClusterRoleBinding
23
+ metadata :
24
+ name : otelcol-prom
25
+ namespace : opentelemetry
26
+ subjects :
27
+ - kind : ServiceAccount
28
+ name : otelcol
29
+ namespace : default
30
+ roleRef :
31
+ kind : ClusterRole
32
+ name : opentelemetry-targetallocator-cr-role
33
+ apiGroup : rbac.authorization.k8s.io
34
+ ---
35
+ apiVersion : rbac.authorization.k8s.io/v1
36
+ kind : ClusterRole
37
+ metadata :
38
+ name : opentelemetry-targetallocator-role
39
+ namespace : opentelemetry
40
+ rules :
41
+ - apiGroups : [""]
42
+ resources :
43
+ - nodes
44
+ - nodes/metrics
45
+ - services
46
+ - endpoints
47
+ - pods
48
+ verbs : ["get", "list", "watch"]
49
+ - apiGroups : [""]
50
+ resources :
51
+ - configmaps
52
+ verbs : ["get"]
53
+ - apiGroups :
54
+ - discovery.k8s.io
55
+ resources :
56
+ - endpointslices
57
+ verbs : ["get", "list", "watch"]
58
+ - apiGroups :
59
+ - networking.k8s.io
60
+ resources :
61
+ - ingresses
62
+ verbs : ["get", "list", "watch"]
63
+ - nonResourceURLs : ["/metrics"]
64
+ verbs : ["get"]
65
+ ---
66
+ apiVersion : rbac.authorization.k8s.io/v1
67
+ kind : ClusterRoleBinding
68
+ metadata :
69
+ name : otelcol-discovery
70
+ namespace : opentelemetry
71
+ subjects :
72
+ - kind : ServiceAccount
73
+ name : otelcol
74
+ namespace : default
75
+ roleRef :
76
+ kind : ClusterRole
77
+ name : opentelemetry-targetallocator-role
78
+ apiGroup : rbac.authorization.k8s.io
Original file line number Diff line number Diff line change
1
+ apiVersion : opentelemetry.io/v1alpha1
2
+ kind : OpenTelemetryCollector
3
+ metadata :
4
+ name : otelcol
5
+ namespace : opentelemetry
6
+ spec :
7
+ mode : statefulset
8
+ targetAllocator :
9
+ image : ghcr.io/open-telemetry/opentelemetry-operator/target-allocator:main
10
+ enabled : true
11
+ serviceAccount : otelcol
12
+ prometheusCR :
13
+ enabled : true
14
+ serviceMonitorSelector :
15
+ app : my-app
16
+ config : |
17
+ receivers:
18
+ prometheus:
19
+ config:
20
+ scrape_configs:
21
+ - job_name: 'otel-collector'
22
+ scrape_interval: 30s
23
+ static_configs:
24
+ - targets: [ '0.0.0.0:8888' ]
25
+ target_allocator:
26
+ endpoint: http://otelcol-targetallocator
27
+ interval: 30s
28
+ collector_id: "${POD_NAME}"
29
+
30
+ exporters:
31
+ logging:
32
+ verbosity: detailed
33
+
34
+ service:
35
+ pipelines:
36
+ metrics:
37
+ receivers: [prometheus]
38
+ processors: []
39
+ exporters: [logging]
Original file line number Diff line number Diff line change
1
+ apiVersion : monitoring.coreos.com/v1
2
+ kind : ServiceMonitor
3
+ metadata :
4
+ name : my-app
5
+ namespace : opentelemetry
6
+ labels :
7
+ app : my-app
8
+ release : prometheus
9
+ spec :
10
+ selector :
11
+ matchLabels :
12
+ app : my-app
13
+ endpoints :
14
+ - port : prom
15
+ path : /metrics
You can’t perform that action at this time.
0 commit comments