Google Kubernetes Engine 中的 OpenCensus 错误 Python
Error in OpenCensus in Google Kubernetes Engine with Python
我正在将容器部署到包含 Python 个应用程序的 GKE,但在尝试使用 OpenCensus 发送跟踪消息时遇到错误:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/opencensus/metrics/transport.py", line 59, in func
return self.func(*aa, **kw)
File "/usr/local/lib/python3.7/site-packages/opencensus/metrics/transport.py", line 113, in export_all
export(itertools.chain(*all_gets))
File "/usr/local/lib/python3.7/site-packages/opencensus/ext/stackdriver/stats_exporter/__init__.py", line 162, in export_metrics
self.client.project_path(self.options.project_id), ts_batch)
File "/usr/local/lib/python3.7/site-packages/google/cloud/monitoring_v3/gapic/metric_service_client.py", line 1024, in create_time_series
request, retry=retry, timeout=timeout, metadata=metadata
File "/usr/local/lib/python3.7/site-packages/google/api_core/gapic_v1/method.py", line 143, in __call__
return wrapped_func(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/google/api_core/retry.py", line 273, in retry_wrapped_func
on_error=on_error,
File "/usr/local/lib/python3.7/site-packages/google/api_core/retry.py", line 182, in retry_target
return target()
File "/usr/local/lib/python3.7/site-packages/google/api_core/timeout.py", line 214, in func_with_timeout
return func(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/google/api_core/grpc_helpers.py", line 59, in error_remapped_callable
six.raise_from(exceptions.from_grpc_error(exc), exc)
File "<string>", line 3, in raise_from
google.api_core.exceptions.InvalidArgument: 400 One or more TimeSeries could not be written: The set of resource labels is incomplete. Missing labels: (container_name namespace_name).: timeSeries[0-199]
有趣的部分似乎是这句话:Missing labels: (container_name namespace_name)
。
当我 运行 在本地使用完全相同的代码时,我没有收到任何错误,而且我确实看到我的跟踪出现在 Stackdriver Metrics Explorer 中,因此问题似乎与 运行 相关在 GKE 的容器中运行。
让 OpenCensus 在 GKE 容器中工作是否需要特定的东西?
答案是你需要在容器中手动设置两个环境变量:CONTAINER_NAME
和NAMESPACE
。我相信 GKE 应该设置这些但不是,因此 OpenCensus 无法找到预期值。示例修复将涉及在 podspec 中包含这两个变量:
spec:
containers:
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: CONTAINER_NAME
value: {{ APP }}-collectors-{{ NAME }}
更多详情:https://github.com/census-instrumentation/opencensus-python/issues/796#issuecomment-539109321
我正在将容器部署到包含 Python 个应用程序的 GKE,但在尝试使用 OpenCensus 发送跟踪消息时遇到错误:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/opencensus/metrics/transport.py", line 59, in func
return self.func(*aa, **kw)
File "/usr/local/lib/python3.7/site-packages/opencensus/metrics/transport.py", line 113, in export_all
export(itertools.chain(*all_gets))
File "/usr/local/lib/python3.7/site-packages/opencensus/ext/stackdriver/stats_exporter/__init__.py", line 162, in export_metrics
self.client.project_path(self.options.project_id), ts_batch)
File "/usr/local/lib/python3.7/site-packages/google/cloud/monitoring_v3/gapic/metric_service_client.py", line 1024, in create_time_series
request, retry=retry, timeout=timeout, metadata=metadata
File "/usr/local/lib/python3.7/site-packages/google/api_core/gapic_v1/method.py", line 143, in __call__
return wrapped_func(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/google/api_core/retry.py", line 273, in retry_wrapped_func
on_error=on_error,
File "/usr/local/lib/python3.7/site-packages/google/api_core/retry.py", line 182, in retry_target
return target()
File "/usr/local/lib/python3.7/site-packages/google/api_core/timeout.py", line 214, in func_with_timeout
return func(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/google/api_core/grpc_helpers.py", line 59, in error_remapped_callable
six.raise_from(exceptions.from_grpc_error(exc), exc)
File "<string>", line 3, in raise_from
google.api_core.exceptions.InvalidArgument: 400 One or more TimeSeries could not be written: The set of resource labels is incomplete. Missing labels: (container_name namespace_name).: timeSeries[0-199]
有趣的部分似乎是这句话:Missing labels: (container_name namespace_name)
。
当我 运行 在本地使用完全相同的代码时,我没有收到任何错误,而且我确实看到我的跟踪出现在 Stackdriver Metrics Explorer 中,因此问题似乎与 运行 相关在 GKE 的容器中运行。
让 OpenCensus 在 GKE 容器中工作是否需要特定的东西?
答案是你需要在容器中手动设置两个环境变量:CONTAINER_NAME
和NAMESPACE
。我相信 GKE 应该设置这些但不是,因此 OpenCensus 无法找到预期值。示例修复将涉及在 podspec 中包含这两个变量:
spec:
containers:
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: CONTAINER_NAME
value: {{ APP }}-collectors-{{ NAME }}
更多详情:https://github.com/census-instrumentation/opencensus-python/issues/796#issuecomment-539109321