configmap-vector.yaml 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: vector-config
  5. namespace: {{ .Release.Namespace }}
  6. labels:
  7. app: vector
  8. data:
  9. vector.toml: |
  10. data_dir = "/var/lib/vector"
  11. [sources.kubernetes_logs]
  12. type = "kubernetes_logs"
  13. read_from = "end"
  14. [transforms.parse_and_enrich]
  15. type = "remap"
  16. inputs = ["kubernetes_logs"]
  17. drop_on_abort = false
  18. source = """
  19. log_line = .log
  20. if log_line == null { log_line = .message }
  21. if log_line == null { log_line = .msg }
  22. log_line = to_string(log_line) ?? ""
  23. parsed = null
  24. if starts_with(log_line, "{") {
  25. parsed = parse_json(log_line) ?? null
  26. }
  27. if parsed != null && is_object(parsed) {
  28. msg_val = parsed.message
  29. if msg_val == null { msg_val = parsed.msg }
  30. if msg_val != null { .message = msg_val }
  31. if parsed.level != null { .level = parsed.level }
  32. if parsed.app != null { .app = parsed.app }
  33. if parsed.env != null { .env = parsed.env }
  34. if parsed.event_class != null { .event_class = parsed.event_class }
  35. if parsed.event != null { .event_class = parsed.event }
  36. if parsed.uri != null { .uri = parsed.uri }
  37. if parsed.uri_group != null { .uri_group = parsed.uri_group }
  38. if parsed.status != null { .status = parsed.status }
  39. if parsed.duration != null { .duration = parsed.duration }
  40. if parsed.traceId != null { .traceId = parsed.traceId }
  41. if parsed.userId != null { .userId = parsed.userId }
  42. if parsed.orderId != null { .orderId = parsed.orderId }
  43. if parsed.error != null { .error = parsed.error }
  44. if parsed.logger_name != null { .logger = parsed.logger_name }
  45. if parsed.thread_name != null { .thread = parsed.thread_name }
  46. }
  47. if .message == null { .message = log_line }
  48. app_val = .app
  49. if app_val == null { app_val = .kubernetes.labels.app }
  50. if app_val == null { app_val = .kubernetes.pod_labels.app }
  51. if app_val == null { app_val = .kubernetes.container_name }
  52. if app_val == null { app_val = .kubernetes.pod_name }
  53. if app_val == null { app_val = "unknown" }
  54. .app = app_val
  55. env_str = to_string(.env) ?? ""
  56. if contains(env_str, "prod") {
  57. .env = "prod"
  58. } else if contains(env_str, "stage") {
  59. .env = "stage"
  60. } else if contains(env_str, "dev") {
  61. .env = "dev"
  62. } else if contains(env_str, "local") {
  63. .env = "local"
  64. } else if env_str != "" {
  65. .env = env_str
  66. } else {
  67. .env = "unknown"
  68. }
  69. uri_str = to_string(.uri) ?? ""
  70. if uri_str != "" { .uri = uri_str }
  71. if !exists(.uri_group) || .uri_group == "" {
  72. if uri_str != "" {
  73. if starts_with(uri_str, "/order/") {
  74. .uri_group = "/order/*"
  75. } else if starts_with(uri_str, "/payment/") {
  76. .uri_group = "/payment/*"
  77. } else if starts_with(uri_str, "/gateway/") {
  78. .uri_group = "/gateway/*"
  79. } else {
  80. .uri_group = "/other"
  81. }
  82. } else {
  83. .uri_group = "/other"
  84. }
  85. }
  86. if !exists(.event_class) || .event_class == "" {
  87. if uri_str != "" {
  88. if contains(uri_str, "order") {
  89. .event_class = "order"
  90. } else if contains(uri_str, "payment") {
  91. .event_class = "payment"
  92. } else if contains(uri_str, "login") {
  93. .event_class = "auth"
  94. } else {
  95. .event_class = "api"
  96. }
  97. } else {
  98. .event_class = "api"
  99. }
  100. }
  101. level_str = to_string(.level) ?? ""
  102. if level_str != "" { .level = level_str } else { .level = "INFO" }
  103. status_str = to_string(.status) ?? ""
  104. if status_str != "" { .status = status_str } else { .status = "unknown" }
  105. duration_str = to_string(.duration) ?? ""
  106. duration_str = replace!(duration_str, "ms", "")
  107. .duration_ms = to_int(duration_str) ?? null
  108. """
  109. [sinks.loki]
  110. type = "loki"
  111. inputs = ["parse_and_enrich"]
  112. endpoint = "{{ .Values.vector.loki.endpoint }}"
  113. encoding.codec = "json"
  114. buffer.type = "memory"
  115. buffer.max_events = 10000
  116. [sinks.loki.labels]
  117. env = '{{ "{{ env }}" }}'
  118. app = '{{ "{{ app }}" }}'
  119. level = '{{ "{{ level }}" }}'
  120. event_class = '{{ "{{ event_class }}" }}'
  121. uri_group = '{{ "{{ uri_group }}" }}'
  122. status = '{{ "{{ status }}" }}'