README.md.gotmpl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. {{ template "chart.header" . }}
  2. {{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }}
  3. {{ template "chart.description" . }}
  4. {{ template "chart.sourcesSection" . }}
  5. {{ template "chart.requirementsSection" . }}
  6. ## Chart Repo
  7. Add the following repo to use the chart:
  8. ```console
  9. helm repo add grafana https://grafana.github.io/helm-charts
  10. ```
  11. ## Installing the Chart
  12. To install the chart with the release name `my-release`:
  13. ```console
  14. helm install my-release grafana/tempo-distributed
  15. ```
  16. ## Uninstalling the Chart
  17. To uninstall/delete the my-release deployment:
  18. ```console
  19. helm delete my-release
  20. ```
  21. The command removes all the Kubernetes components associated with the chart and deletes the release.
  22. ## Upgrading
  23. A major chart version change indicates that there is an incompatible breaking change needing manual actions.
  24. ### From Chart versions < 1.6.0
  25. The metrics generator component in the chart has been disabled by default, but the configuration for the processors was not empty, resulting error sin the distributor log. Here we align the default metrics generator config settings to both disable the generator and remove processors. Users who wish to keep the their processors enabled, will need to update their values.
  26. ### From Chart versions < 1.5.0
  27. Please be aware that we've updated the minor version to Tempo 2.2, which includes breaking changes.
  28. We recommend reviewing the [release notes](https://github.com/grafana/tempo/releases/tag/v2.2.0) before upgrading.
  29. ### From Chart versions < 1.3.0
  30. Please be aware that we've updated the minor version to Tempo 2.1, which includes breaking changes.
  31. We recommend reviewing the [release notes](https://github.com/grafana/tempo/releases/tag/v2.1.0/) before upgrading.
  32. ### From Chart versions < 1.0.0
  33. Please note that we've incremented the major version when upgrading to Tempo 2.0. There were a large number of
  34. changes in this release (breaking and otherwise). It is encouraged to review the [release notes](https://grafana.com/docs/tempo/latest/release-notes/v2-0/)
  35. and [1.5 -> 2.0 upgrade guide](https://grafana.com/docs/tempo/latest/setup/upgrade/) before upgrading.
  36. ### From chart version < 0.27.0
  37. Version 0.27.0:
  38. Many changes have been introduced, including some breaking changes.
  39. The [PR](https://github.com/grafana/helm-charts/pull/1759) includes additional details.
  40. * **BREAKING CHANGE** centralize selector label handling -- users who wish to keep old values should still be able to use the `nameOverride` and `fullNameOverride` top level keys in their values.
  41. * **BREAKING CHANGE** serviceMonitor has been nested under metaMonitoring -- metamonitoring can be used scrape services as well as install the operator with the following values. Note also that the port names have changed from `http` to `http-metrics`.
  42. ```yaml
  43. metaMonitoring:
  44. serviceMonitor:
  45. enabled: true
  46. grafanaAgent:
  47. enabled: true
  48. installOperator: true
  49. ```
  50. * minio can now be enabled as part of this chart using the following values
  51. ```yaml
  52. minio:
  53. enabled: true
  54. ```
  55. * allow configuration to be stored in a secret. See the documentation for `useExternalConfig` and `configStorageType` in the values file for more details.
  56. ### From chart version < 0.26.0
  57. Version 0.26.0
  58. * Moves metricsGenerator.config.storage_remote_write to metricsGenerator.config.storage.remote_write
  59. * Moves metricsGenerator.config.service_graphs_max_items to metricsGenerator.config.processor.service_graphs.max_items
  60. ### From chart version < 0.23.0
  61. Version 0.23.0:
  62. * Adds /var/tempo emptyDir mount for querier, queryfrontend, distributor and compactor. Previously, /var/tempo was directory inside container.
  63. * Sets queryFrontend.query.enabled to false. tempo-query is only required for grafana version <7.5 for compatibility with jaeger-ui. Please also note that tempo-query is incompatible with securityContext readOnlyRootFilesystem set to true.
  64. * Sets stricter default securityContext:
  65. ```yaml
  66. tempo:
  67. securityContext:
  68. capabilities:
  69. drop:
  70. - ALL
  71. readOnlyRootFilesystem: true
  72. runAsNonRoot: true
  73. runAsUser: 1000
  74. runAsGroup: 1000
  75. allowPrivilegeEscalation: false
  76. podSecurityContext:
  77. fsGroup: 1000
  78. ```
  79. If you had ingester persistence enabled, you might need to manually change ownership of files in your PV if your CSI doesn't support fsGroup
  80. ### From Chart version >= 0.22.0
  81. Align Istio GRPC named port syntax. For example,
  82. - otlp-grpc -> grpc-otlp
  83. - distributor-otlp-grpc -> grpc-distributor-otlp
  84. - jaeger-grpc -> grpc-jaeger
  85. - distributor-jaeger-grpc -> grpc-distributor-jaeger
  86. In case you need to rollback, please search the right hand side pattern and replace with left hand side pattern.
  87. ### From Chart version < 0.20.0
  88. The image's attributes must be set under the `image` key for the Memcached service.
  89. ```yaml
  90. memcached:
  91. image:
  92. registry: docker.io
  93. repository: memcached
  94. tag: "1.5.17-alpine"
  95. pullPolicy: "IfNotPresent"
  96. ```
  97. ### From Chart version < 0.18.0
  98. Trace ingestion must now be enabled with the `enabled` key:
  99. ```yaml
  100. traces:
  101. otlp:
  102. grpc:
  103. enabled: true
  104. http:
  105. enabled: true
  106. zipkin:
  107. enabled: true
  108. jaeger:
  109. thriftHttp:
  110. enabled: true
  111. opencensus:
  112. enabled: true
  113. ```
  114. ### From Chart versions < 0.9.0
  115. This release the component label was shortened to be more aligned with the Loki-distributed chart and the [mixin](https://github.com/grafana/tempo/tree/master/operations/tempo-mixin) dashboards.
  116. Due to the label changes, an existing installation cannot be upgraded without manual interaction. There are basically two options:
  117. Option 1
  118. Uninstall the old release and re-install the new one. There will be no data loss, as the collectors/agents can cache for a short period.
  119. Option 2
  120. Add new selector labels to the existing pods. This option will make your pods also temporarely unavailable, option 1 is faster:
  121. ```
  122. kubectl label pod -n <namespace> -l app.kubernetes.io/component=<release-name>-tempo-distributed-<component>,app.kubernetes.io/instance=<instance-name> app.kubernetes.io/component=<component> --overwrite
  123. ```
  124. Perform a non-cascading deletion of the Deployments and Statefulsets which will keep the pods running:
  125. ```
  126. kubectl delete <deployment/statefulset> -n <namespace> -l app.kubernetes.io/component=<release-name>-tempo-distributed-<component>,app.kubernetes.io/instance=<instance-name> --cascade=false
  127. ```
  128. Perform a regular Helm upgrade on the existing release. The new Deployment/Statefulset will pick up the existing pods and perform a rolling upgrade.
  129. ### From Chart versions < 0.8.0
  130. By default all tracing protocols are disabled and you need to specify which protocols to enable for ingestion.
  131. For example to enable Jaeger grpc thrift http and zipkin protocols:
  132. ```yaml
  133. traces:
  134. jaeger:
  135. grpc: true
  136. thriftHttp: true
  137. zipkin: true
  138. ```
  139. The distributor service is now called {{"{{"}}tempo.fullname{{"}}"}}-distributor. That could impact your ingestion towards this service.
  140. ### From Chart Versions < 0.7.0
  141. The memcached default args are removed and should be provided manually. The settings for the `memcached.exporter` moved to `memcachedExporter`
  142. {{ template "chart.valuesSection" . }}
  143. ## Components
  144. The chart supports the components shown in the following table.
  145. Ingester, distributor, querier, query-frontend, and compactor are always installed.
  146. The other components are optional and must be explicitly enabled.
  147. | Component | Optional |
  148. | --- | --- |
  149. | ingester | no |
  150. | distributor | no |
  151. | querier | no |
  152. | query-frontend | no |
  153. | compactor | no |
  154. | metrics-generator | yes |
  155. | memcached | yes |
  156. | gateway | yes |
  157. ## [Configuration](https://grafana.com/docs/tempo/latest/configuration/)
  158. This chart configures Tempo in microservices mode.
  159. **NOTE:**
  160. In its default configuration, the chart uses `local` filesystem as storage.
  161. The reason for this is that the chart can be validated and installed in a CI pipeline.
  162. However, this setup is not fully functional.
  163. The recommendation is to use object storage, such as S3, GCS, MinIO, etc., or one of the other options documented at https://grafana.com/docs/tempo/latest/configuration/#storage.
  164. Alternatively, in order to quickly test Tempo using the filestore, the [single binary chart](https://github.com/grafana/helm-charts/tree/main/charts/tempo) can be used.
  165. ### Overriding configuration variables with structuredConfig
  166. tempo.structuredConfig variable can be used to alter individual values in the configuration and it's structured YAML instead of text. It takes precedence over all other variable adjustments inside tempo.yaml config file, ie s3 storage settings.
  167. Example:
  168. ```yaml
  169. tempo:
  170. structuredConfig:
  171. query_frontend:
  172. search:
  173. max_duration: 12h0m0s
  174. ```
  175. ### Activate metrics generator
  176. Metrics-generator is disabled by default and can be activated by configuring the following values:
  177. ```yaml
  178. metricsGenerator:
  179. enabled: true
  180. config:
  181. storage_remote_write:
  182. - url: http://cortex/api/v1/push
  183. send_exemplars: true
  184. # headers:
  185. # x-scope-orgid: operations
  186. # Global overrides
  187. global_overrides:
  188. metrics_generator_processors:
  189. - service-graphs
  190. - span-metrics
  191. ```
  192. ----
  193. ### Directory and File Locations
  194. * Volumes are mounted to `/var/tempo`. The various directories Tempo needs should be configured as subdirectories (e. g. `/var/tempo/wal`, `/var/tempo/traces`). Tempo will create the directories automatically.
  195. * The config file is mounted to `/conf/tempo-query.yaml` and passed as CLI arg.
  196. ### Example configuration using S3 for storage
  197. ```yaml
  198. config: |
  199. multitenancy_enabled: false
  200. compactor:
  201. compaction:
  202. block_retention: 48h
  203. ring:
  204. kvstore:
  205. store: memberlist
  206. distributor:
  207. receivers:
  208. jaeger:
  209. protocols:
  210. grpc:
  211. endpoint: 0.0.0.0:14250
  212. thrift_binary:
  213. endpoint: 0.0.0.0:6832
  214. thrift_compact:
  215. endpoint: 0.0.0.0:6831
  216. thrift_http:
  217. endpoint: 0.0.0.0:14268
  218. querier:
  219. frontend_worker:
  220. frontend_address: {{"{{"}} include "tempo.resourceName" (dict "ctx" . "component" "query-frontend") {{"}}"}}:9095
  221. ingester:
  222. lifecycler:
  223. ring:
  224. replication_factor: 1
  225. memberlist:
  226. abort_if_cluster_join_fails: false
  227. join_members:
  228. - {{"{{"}} include "tempo.fullname" . {{"}}"}}-memberlist
  229. overrides:
  230. per_tenant_override_config: /runtime-config/overrides.yaml
  231. server:
  232. http_listen_port: 3100
  233. storage:
  234. trace:
  235. backend: s3
  236. s3:
  237. access_key: tempo
  238. bucket: tempo
  239. endpoint: minio:9000
  240. insecure: true
  241. secret_key: supersecret
  242. pool:
  243. queue_depth: 2000
  244. wal:
  245. path: /var/tempo/wal
  246. memcached:
  247. consistent_hash: true
  248. host: a-tempo-distributed-memcached
  249. service: memcached-client
  250. timeout: 500ms
  251. ```