Skip to content

Commit f84a758

Browse files
committed
新增 GHLearning.OpenTelemetrySample 專案及配置
更新 Visual Studio 解決方案,新增 `GHLearning.OpenTelemetrySample` 專案並調整相關配置。 在 `docker-compose.yml` 中更改服務容器名稱前綴,新增 `tempo` 服務。 更新 `otel-collector-config.yaml` 以支持 `tempo` 和 `elasticsearch`。 在 `WeatherForecastController.cs` 中新增日誌記錄功能。 更新 `GHLearning.OpenTelemetrySample.csproj` 中的 NuGet 套件版本,並新增 `Scalar.AspNetCore`。 調整 `launchSettings.json` 和 `appsettings` 配置以反映新的 URL 和環境變數。 新增 `tempo.yaml` 配置以設置 HTTP 伺服器和存儲。
1 parent fb79358 commit f84a758

14 files changed

+291
-134
lines changed

GHLearning.OpenTelemetry.sln

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,24 @@ VisualStudioVersion = 17.11.35431.28
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
77
EndProject
8-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GHLearning.OpenTelemetrySample", "src\GHLearning.OpenTelemetrySample\GHLearning.OpenTelemetrySample.csproj", "{A7EBA9BC-01A1-74A6-C37A-DC56C4FF2F47}"
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GHLearning.OpenTelemetrySample", "src\GHLearning.OpenTelemetrySample\GHLearning.OpenTelemetrySample.csproj", "{81C408D7-D778-443A-A13F-E7F1DD0DE179}"
99
EndProject
1010
Global
1111
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1212
Debug|Any CPU = Debug|Any CPU
1313
Release|Any CPU = Release|Any CPU
1414
EndGlobalSection
1515
GlobalSection(ProjectConfigurationPlatforms) = postSolution
16-
{A7EBA9BC-01A1-74A6-C37A-DC56C4FF2F47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17-
{A7EBA9BC-01A1-74A6-C37A-DC56C4FF2F47}.Debug|Any CPU.Build.0 = Debug|Any CPU
18-
{A7EBA9BC-01A1-74A6-C37A-DC56C4FF2F47}.Release|Any CPU.ActiveCfg = Release|Any CPU
19-
{A7EBA9BC-01A1-74A6-C37A-DC56C4FF2F47}.Release|Any CPU.Build.0 = Release|Any CPU
16+
{81C408D7-D778-443A-A13F-E7F1DD0DE179}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17+
{81C408D7-D778-443A-A13F-E7F1DD0DE179}.Debug|Any CPU.Build.0 = Debug|Any CPU
18+
{81C408D7-D778-443A-A13F-E7F1DD0DE179}.Release|Any CPU.ActiveCfg = Release|Any CPU
19+
{81C408D7-D778-443A-A13F-E7F1DD0DE179}.Release|Any CPU.Build.0 = Release|Any CPU
2020
EndGlobalSection
2121
GlobalSection(SolutionProperties) = preSolution
2222
HideSolutionNode = FALSE
2323
EndGlobalSection
2424
GlobalSection(NestedProjects) = preSolution
25-
{A7EBA9BC-01A1-74A6-C37A-DC56C4FF2F47} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
25+
{81C408D7-D778-443A-A13F-E7F1DD0DE179} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
2626
EndGlobalSection
2727
GlobalSection(ExtensibilityGlobals) = postSolution
2828
SolutionGuid = {EC6F32B7-BA86-41F1-98A9-3B69554D8C75}

docker-compose.yml

Lines changed: 54 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
---
2-
version: '3.4'
32
services:
43
app:
54
build:
65
context: "."
76
dockerfile: Dockerfile
8-
container_name: sample-app
7+
container_name: otel-app
98
environment:
109
- ASPNETCORE_ENVIRONMENT=Production
1110
ports:
1211
- 8080:8080
1312
networks:
14-
- sample-nat
13+
- otel-nat
1514
depends_on:
16-
- otel-collector
15+
- opentelemetry-collector
1716

1817
seq:
1918
image: datalust/seq:2024.3
20-
container_name: sample-seq
19+
container_name: otel-seq
2120
environment:
2221
- ACCEPT_EULA=Y
2322
volumes:
@@ -27,51 +26,65 @@ services:
2726
- "45341:45341"
2827
- "8081:80"
2928
networks:
30-
- sample-nat
29+
- otel-nat
3130
restart: always
3231

33-
otel-collector:
32+
opentelemetry-collector:
3433
image: otel/opentelemetry-collector-contrib:0.114.0
35-
container_name: sample-otel-collector
36-
command: ["--config=/etc/otel-collector-config.yaml"]
34+
container_name: otel-opentelemetry-collector
3735
volumes:
38-
- ./otel-collector/otel-collector-config.yaml:/etc/otel-collector-config.yaml:ro
36+
- ./otel-collector/otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml:ro
3937
ports:
4038
- "4317:4317" # OTLP gRPC receiver
4139
- "8888:8888" # internal metrics
4240
- "8889:8889" # OTLP metrics
4341
networks:
44-
- sample-nat
42+
- otel-nat
4543
restart: unless-stopped
4644

4745
fluentbit:
4846
image: fluent/fluent-bit:3.2.10
49-
container_name: sample-fluentbit
47+
container_name: otel-fluentbit
5048
volumes:
5149
- ./Fluent-Bit:/fluent-bit/etc
5250
ports:
5351
- "4318:4318" # OTLP gRPC receiver
5452
networks:
55-
- sample-nat
53+
- otel-nat
5654
depends_on:
57-
- otel-collector
55+
- opentelemetry-collector
5856
restart: unless-stopped
5957

6058
loki:
6159
image: grafana/loki:latest
62-
container_name: sample-loki
60+
container_name: otel-loki
6361
command: -config.file=/etc/loki/local-config.yaml
6462
ports:
6563
- "3100:3100"
6664
networks:
67-
- sample-nat
65+
- otel-nat
6866
depends_on:
69-
- otel-collector
67+
- opentelemetry-collector
68+
restart: unless-stopped
69+
70+
tempo:
71+
image: grafana/tempo:main-d528a28
72+
container_name: otel-tempo
73+
command: [ "-config.file=/etc/tempo.yaml" ]
74+
volumes:
75+
- ./tempo/tempo.yaml:/etc/tempo.yaml
76+
- tempo-data:/tmp/tempo
77+
ports:
78+
- "3200:3200" # tempo
79+
networks:
80+
- otel-nat
81+
depends_on:
82+
- opentelemetry-collector
7083
restart: unless-stopped
7184

7285
elasticsearch:
7386
image: docker.elastic.co/elasticsearch/elasticsearch:8.16.1
74-
container_name: sample-elasticsearch
87+
container_name: otel-elasticsearch
7588
environment:
7689
- cluster.name=jaeger-cluster
7790
- discovery.type=single-node
@@ -85,12 +98,12 @@ services:
8598
- "9200:9200"
8699
- "9300:9300"
87100
networks:
88-
- sample-nat
101+
- otel-nat
89102
restart: on-failure
90103

91104
jaeger-collector:
92105
image: jaegertracing/jaeger-collector:1.63.0
93-
container_name: sample-jaeger-collector
106+
container_name: otel-jaeger-collector
94107
environment:
95108
- SPAN_STORAGE_TYPE=elasticsearch
96109
command: [
@@ -106,14 +119,14 @@ services:
106119
- "14250:14250"
107120
- "9411:9411"
108121
networks:
109-
- sample-nat
122+
- otel-nat
110123
depends_on:
111124
- elasticsearch
112125
restart: on-failure
113126

114127
jaeger-query:
115128
image: jaegertracing/jaeger-query:1.63.0
116-
container_name: sample-jaeger-query
129+
container_name: otel-jaeger-query
117130
environment:
118131
- SPAN_STORAGE_TYPE=elasticsearch
119132
- no_proxy=localhost
@@ -126,14 +139,14 @@ services:
126139
- "16686:16686"
127140
- "16687:16687"
128141
networks:
129-
- sample-nat
142+
- otel-nat
130143
depends_on:
131144
- jaeger-collector
132145
restart: on-failure
133146

134147
kibana:
135148
image: docker.elastic.co/kibana/kibana:8.16.1
136-
container_name: sample-kibana
149+
container_name: otel-kibana
137150
environment:
138151
# remember the container_name for elasticsearch?
139152
# we use it here to access that container
@@ -146,12 +159,12 @@ services:
146159
depends_on:
147160
- elasticsearch
148161
networks:
149-
- sample-nat
162+
- otel-nat
150163
restart: on-failure
151164

152165
cadvisor:
153166
image: gcr.io/cadvisor/cadvisor:latest
154-
container_name: sample-cadvisor
167+
container_name: otel-cadvisor
155168
volumes:
156169
- "/:/rootfs"
157170
- "/var/run:/var/run"
@@ -164,12 +177,12 @@ services:
164177
ports:
165178
- "8090:8080"
166179
networks:
167-
- sample-nat
180+
- otel-nat
168181
restart: unless-stopped
169182

170183
node-exporter:
171184
image: prom/node-exporter:v1.9.0
172-
container_name: sample-node-exporter
185+
container_name: otel-node-exporter
173186
command:
174187
- '--path.procfs=/host/proc'
175188
- '--path.rootfs=/rootfs'
@@ -186,23 +199,24 @@ services:
186199
ports:
187200
- 9100:9100
188201
networks:
189-
- sample-nat
202+
- otel-nat
190203
restart: unless-stopped
191204

192205
prometheus:
193206
image: prom/prometheus:v3.0.1
194-
container_name: sample-prometheus
207+
container_name: otel-prometheus
195208
volumes:
196-
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
209+
- "./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro"
210+
- prometheus-data:/prometheus
197211
ports:
198212
- "9090:9090"
199213
networks:
200-
- sample-nat
214+
- otel-nat
201215
restart: unless-stopped
202216

203217
grafana:
204218
image: grafana/grafana-oss:11.3.1
205-
container_name: sample-grafana
219+
container_name: otel-grafana
206220
environment:
207221
GF_SECURITY_ADMIN_USER: admin
208222
GF_SECURITY_ADMIN_PASSWORD: 1qaz2wsx
@@ -214,25 +228,28 @@ services:
214228
ports:
215229
- "3000:3000"
216230
networks:
217-
- sample-nat
231+
- otel-nat
218232
restart: unless-stopped
219233

220234
gatus:
221235
image: docker.io/twinproduction/gatus:v5.17.0
222-
container_name: sample-gatus
236+
container_name: otel-gatus
223237
user: '999:999'
224238
volumes:
225239
- ./gatus/config.yaml:/config/config.yaml:ro
226240
ports:
227241
- "8088:8080"
228242
networks:
229-
- sample-nat
243+
- otel-nat
230244
restart: unless-stopped
231245

232246
volumes:
233247
elasticsearch-data:
234248
seq-data:
235249
grafana-data:
250+
uptime-kuma-data:
251+
tempo-data:
252+
prometheus-data:
236253
networks:
237-
sample-nat:
254+
otel-nat:
238255
driver: bridge

grafana/datasources.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,44 @@ datasources:
8181
# httpHeaderValue1: "Bearer xf5yhfkpsnmgo"
8282
version: 1
8383
# <bool> allow users to edit datasources from the UI.
84+
editable: false
85+
- name: tempo
86+
# <string, required> datasource type. Required
87+
type: tempo
88+
# <string, required> access mode. direct or proxy. Required
89+
access: proxy
90+
# <int> org id. will default to orgId 1 if not specified
91+
orgId: 1
92+
# <string> url
93+
url: http://tempo:3200
94+
# <string> database password, if used
95+
# password:
96+
# <string> database user, if used
97+
# user:
98+
# <string> database name, if used
99+
# database:
100+
# <bool> enable/disable basic auth
101+
# basicAuth:
102+
# <string> basic auth username
103+
# basicAuthUser:
104+
# <string> basic auth password
105+
# basicAuthPassword:
106+
# <bool> enable/disable with credentials headers
107+
# withCredentials:
108+
# <bool> mark as default datasource. Max one per org
109+
isDefault: false
110+
# <map> fields that will be converted to json and stored in json_data
111+
# jsonData:
112+
# graphiteVersion: "1.1"
113+
# tlsAuth: true
114+
# tlsAuthWithCACert: true
115+
# httpHeaderName1: "Authorization"
116+
# <string> json object of data that will be encrypted.
117+
# secureJsonData:
118+
# tlsCACert: "..."
119+
# tlsClientCert: "..."
120+
# tlsClientKey: "..."
121+
# httpHeaderValue1: "Bearer xf5yhfkpsnmgo"
122+
version: 1
123+
# <bool> allow users to edit datasources from the UI.
84124
editable: false

0 commit comments

Comments
 (0)