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  }