github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/production/nomad/loki-distributed/job.nomad.hcl (about) 1 variable "version" { 2 type = string 3 description = "Loki version" 4 default = "2.6.1" 5 } 6 7 job "loki" { 8 datacenters = ["dc1"] 9 10 group "compactor" { 11 count = 1 12 13 ephemeral_disk { 14 size = 1000 15 sticky = true 16 } 17 18 network { 19 port "http" {} 20 port "grpc" {} 21 } 22 23 service { 24 name = "loki-compactor" 25 port = "http" 26 27 meta { 28 alloc_id = NOMAD_ALLOC_ID 29 component = "compactor" 30 } 31 32 tags = [ 33 "traefik.enable=true", 34 35 "traefik.http.routers.loki-compactor-ring.entrypoints=https", 36 "traefik.http.routers.loki-compactor-ring.rule=Host(`loki-compactor.service.consul`) && Path(`/compactor/ring`)", 37 ] 38 39 check { 40 name = "Loki compactor" 41 port = "http" 42 type = "http" 43 path = "/ready" 44 interval = "20s" 45 timeout = "1s" 46 } 47 } 48 49 task "compactor" { 50 driver = "docker" 51 user = "nobody" 52 kill_timeout = "90s" 53 54 config { 55 image = "grafana/loki:${var.version}" 56 ports = [ 57 "http", 58 "grpc", 59 ] 60 61 args = [ 62 "-target=compactor", 63 "-config.file=/local/config.yml", 64 "-config.expand-env=true", 65 ] 66 } 67 68 template { 69 data = file("config.yml") 70 destination = "local/config.yml" 71 } 72 73 template { 74 data = <<-EOH 75 S3_ACCESS_KEY_ID=<access_key> 76 S3_SECRET_ACCESS_KEY=<secret_access_key> 77 EOH 78 79 destination = "secrets/s3.env" 80 env = true 81 } 82 83 resources { 84 cpu = 3000 85 memory = 256 86 memory_max = 1024 87 } 88 } 89 } 90 91 group "ruler" { 92 count = 1 93 94 ephemeral_disk { 95 size = 1000 96 sticky = true 97 } 98 99 network { 100 port "http" {} 101 port "grpc" {} 102 } 103 104 service { 105 name = "loki-ruler" 106 port = "http" 107 108 meta { 109 alloc_id = NOMAD_ALLOC_ID 110 component = "ruler" 111 } 112 113 tags = [ 114 "traefik.enable=true", 115 116 "traefik.http.routers.loki-ruler.entrypoints=https", 117 "traefik.http.routers.loki-ruler.rule=Host(`loki-query-frontend.service.consul`) && (PathPrefix(`/loki/api/v1/rules`) || PathPrefix(`/api/prom/rules`) || PathPrefix (`/prometheus/api/v1`))", 118 119 "traefik.http.routers.loki-ruler-ring.entrypoints=https", 120 "traefik.http.routers.loki-ruler-ring.rule=Host(`loki-ruler.service.consul`) && Path(`/ruler/ring`)", 121 ] 122 123 check { 124 name = "Loki ruler" 125 port = "http" 126 type = "http" 127 path = "/ready" 128 interval = "20s" 129 timeout = "1s" 130 } 131 132 task "ruler" { 133 driver = "docker" 134 user = "nobody" 135 kill_timeout = "90s" 136 137 config { 138 image = "grafana/loki:${var.version}" 139 ports = [ 140 "http", 141 "grpc", 142 ] 143 144 args = [ 145 "-target=ruler", 146 "-config.file=/local/config.yml", 147 "-config.expand-env=true", 148 ] 149 } 150 151 template { 152 data = file("config.yml") 153 destination = "local/config.yml" 154 } 155 156 dynamic "template" { 157 for_each = fileset(".", "rules/**") 158 159 content { 160 data = file(template.value) 161 destination = "local/${template.value}" 162 left_delimiter = "[[" 163 right_delimiter = "]]" 164 } 165 } 166 167 template { 168 data = <<-EOH 169 S3_ACCESS_KEY_ID=<access_key> 170 S3_SECRET_ACCESS_KEY=<secret_access_key> 171 EOH 172 173 destination = "secrets/s3.env" 174 env = true 175 } 176 177 resources { 178 cpu = 1000 179 memory = 256 180 memory_max = 512 181 } 182 } 183 } 184 185 group "distibutor" { 186 count = 2 187 188 network { 189 port "http" {} 190 port "grpc" {} 191 } 192 193 service { 194 name = "loki-distributor" 195 port = "http" 196 197 meta { 198 alloc_id = NOMAD_ALLOC_ID 199 component = "distributor" 200 } 201 202 tags = [ 203 "traefik.enable=true", 204 205 "traefik.http.routers.loki-distributor.entrypoints=https", 206 "traefik.http.routers.loki-distributor.rule=Host(`loki-distributor.service.consul`)", 207 208 "traefik.http.routers.loki-distributor-ring.entrypoints=https", 209 "traefik.http.routers.loki-distributor-ring.rule=Host(`loki-distributor.cinarra.com`) && Path(`/distributor/ring`)", 210 ] 211 212 check { 213 name = "Loki distibutor" 214 port = "http" 215 type = "http" 216 path = "/ready" 217 interval = "20s" 218 timeout = "1s" 219 } 220 } 221 222 task "distibutor" { 223 driver = "docker" 224 user = "nobody" 225 kill_timeout = "90s" 226 227 config { 228 image = "grafana/loki:${var.version}" 229 ports = [ 230 "http", 231 "grpc", 232 ] 233 234 args = [ 235 "-target=distributor", 236 "-config.file=/local/config.yml", 237 "-config.expand-env=true", 238 ] 239 } 240 241 template { 242 data = file("config.yml") 243 destination = "local/config.yml" 244 } 245 246 resources { 247 cpu = 200 248 memory = 128 249 memory_max = 1024 250 } 251 } 252 } 253 254 group "ingester" { 255 count = 2 256 257 constraint { 258 # choose your failure domain 259 # must be the same as `instance_availability_zone` in config file 260 distinct_property = node.unique.name 261 # distinct_property = node.datacenter 262 # distinct_property = attr.platform.aws.placement.availability-zone 263 } 264 265 ephemeral_disk { 266 size = 4000 267 sticky = true 268 } 269 270 network { 271 port "http" {} 272 port "grpc" {} 273 } 274 275 service { 276 name = "loki-ingester" 277 port = "http" 278 279 meta { 280 alloc_id = NOMAD_ALLOC_ID 281 component = "ingester" 282 } 283 284 tags = [ 285 "traefik.enable=true", 286 287 "traefik.http.routers.loki-ingester-ring.entrypoints=https", 288 "traefik.http.routers.loki-ingester-ring.rule=Host(`loki-ingester.service.consul`) && Path(`/ring`)", 289 ] 290 291 check { 292 name = "Loki ingester" 293 port = "http" 294 type = "http" 295 path = "/ready" 296 interval = "20s" 297 timeout = "1s" 298 } 299 } 300 301 task "ingester" { 302 driver = "docker" 303 user = "nobody" 304 kill_timeout = "90s" 305 306 config { 307 image = "grafana/loki:${var.version}" 308 ports = [ 309 "http", 310 "grpc", 311 ] 312 313 args = [ 314 "-target=ingester", 315 "-config.file=/local/config.yml", 316 "-config.expand-env=true", 317 ] 318 } 319 320 template { 321 data = file("config.yml") 322 destination = "local/config.yml" 323 } 324 325 template { 326 data = <<-EOH 327 S3_ACCESS_KEY_ID=<access_key> 328 S3_SECRET_ACCESS_KEY=<secret_access_key> 329 EOH 330 331 destination = "secrets/s3.env" 332 env = true 333 } 334 335 resources { 336 cpu = 300 337 memory = 128 338 memory_max = 2048 339 } 340 } 341 } 342 343 group "querier" { 344 count = 2 345 346 network { 347 port "http" {} 348 port "grpc" {} 349 } 350 351 service { 352 name = "loki-querier" 353 port = "http" 354 355 meta { 356 alloc_id = NOMAD_ALLOC_ID 357 component = "querier" 358 } 359 360 check { 361 name = "Loki querier" 362 port = "http" 363 type = "http" 364 path = "/ready" 365 interval = "50s" 366 timeout = "1s" 367 } 368 } 369 370 task "querier" { 371 driver = "docker" 372 user = "nobody" 373 kill_timeout = "90s" 374 375 config { 376 image = "grafana/loki:${var.version}" 377 ports = [ 378 "http", 379 "grpc", 380 ] 381 382 args = [ 383 "-target=querier", 384 "-config.file=/local/config.yml", 385 "-config.expand-env=true", 386 ] 387 } 388 389 template { 390 data = file("config.yml") 391 destination = "local/config.yml" 392 } 393 394 template { 395 data = <<-EOH 396 S3_ACCESS_KEY_ID=<access_key> 397 S3_SECRET_ACCESS_KEY=<secret_access_key> 398 EOH 399 400 destination = "secrets/s3.env" 401 env = true 402 } 403 404 resources { 405 cpu = 200 406 memory = 128 407 memory_max = 2048 408 } 409 } 410 } 411 412 group "query-scheduler" { 413 count = 2 414 415 network { 416 port "http" {} 417 port "grpc" { 418 to = 9096 419 static = 9096 420 } 421 } 422 423 service { 424 name = "loki-query-scheduler" 425 port = "http" 426 427 meta { 428 alloc_id = NOMAD_ALLOC_ID 429 component = "query-scheduler" 430 } 431 432 check { 433 name = "Loki query-scheduler" 434 port = "http" 435 type = "http" 436 path = "/ready" 437 interval = "20s" 438 timeout = "1s" 439 } 440 } 441 442 task "query-scheduler" { 443 driver = "docker" 444 user = "nobody" 445 kill_timeout = "90s" 446 447 config { 448 image = "grafana/loki:${var.version}" 449 ports = [ 450 "http", 451 "grpc", 452 ] 453 454 args = [ 455 "-target=query-scheduler", 456 "-config.file=/local/config.yml", 457 "-config.expand-env=true", 458 ] 459 } 460 461 template { 462 data = file("config.yml") 463 destination = "local/config.yml" 464 } 465 466 resources { 467 cpu = 100 468 memory = 64 469 memory_max = 128 470 } 471 } 472 } 473 474 group "query-frontend" { 475 count = 2 476 477 network { 478 port "http" {} 479 port "grpc" {} 480 } 481 482 service { 483 name = "loki-query-frontend" 484 port = "http" 485 486 meta { 487 alloc_id = NOMAD_ALLOC_ID 488 component = "query-frontend" 489 } 490 491 tags = [ 492 "traefik.enable=true", 493 494 "traefik.http.routers.loki-query-frontend.entrypoints=https", 495 "traefik.http.routers.loki-query-frontend.rule=Host(`loki-query-frontend.service.consul`)", 496 ] 497 498 check { 499 name = "Loki query-frontend" 500 port = "http" 501 type = "http" 502 path = "/ready" 503 interval = "20s" 504 timeout = "1s" 505 } 506 507 task "query-frontend" { 508 driver = "docker" 509 user = "nobody" 510 kill_timeout = "90s" 511 512 config { 513 image = "grafana/loki:${var.version}" 514 ports = [ 515 "http", 516 "grpc", 517 ] 518 519 args = [ 520 "-target=query-frontend", 521 "-config.file=/local/config.yml", 522 "-config.expand-env=true", 523 ] 524 } 525 526 template { 527 data = file("config.yml") 528 destination = "local/config.yml" 529 } 530 531 resources { 532 cpu = 100 533 memory = 64 534 memory_max = 128 535 } 536 } 537 } 538 539 group "index-gateway" { 540 count = 1 541 542 ephemeral_disk { 543 size = 1000 544 sticky = true 545 } 546 547 network { 548 port "http" {} 549 port "grpc" { 550 to = 9097 551 static = 9097 552 } 553 } 554 555 service { 556 name = "loki-index-gateway" 557 port = "http" 558 559 meta { 560 alloc_id = NOMAD_ALLOC_ID 561 component = "index-gateway" 562 } 563 564 check { 565 name = "Loki index-gateway" 566 port = "http" 567 type = "http" 568 path = "/ready" 569 interval = "20s" 570 timeout = "1s" 571 } 572 } 573 574 task "index-gateway" { 575 driver = "docker" 576 user = "nobody" 577 kill_timeout = "90s" 578 579 config { 580 image = "grafana/loki:${var.version}" 581 ports = [ 582 "http", 583 "grpc", 584 ] 585 586 args = [ 587 "-target=index-gateway", 588 "-config.file=/local/config.yml", 589 "-config.expand-env=true", 590 ] 591 } 592 593 template { 594 data = file("config.yml") 595 destination = "local/config.yml" 596 } 597 598 template { 599 data = <<-EOH 600 S3_ACCESS_KEY_ID=<access_key> 601 S3_SECRET_ACCESS_KEY=<secret_access_key> 602 EOH 603 604 destination = "secrets/s3.env" 605 env = true 606 } 607 608 resources { 609 cpu = 200 610 memory = 128 611 memory_max = 1024 612 } 613 } 614 } 615 }