Skip to content

Promtail 2.2.0 crashes when pushing to multiple Loki instances: "concurrent map read and map write" #3571

Closed
@mxsiegle

Description

@mxsiegle

Hey,

we are running Promtail 2.2.0 as Pushserver (as upstream for other Promtail instances) and are trying to send the logs to multiple Loki instances.
As soon as I configure a 2nd Loki instance in the Promtail clients: section, it fails to start and crashes immediately with the following error:

level=info ts=2021-04-01T08:34:36.786819377Z caller=pushtarget.go:78 msg="starting push server" job=pushserver
level=info ts=2021-04-01T08:34:36.787261628Z caller=server.go:229 http=[::]:3500 grpc=[::]:3600 msg="server listening on addresses"
level=info ts=2021-04-01T08:34:36.788144852Z caller=kubernetes.go:264 component=discovery discovery=kubernetes msg="Using pod service account via in-cluster config"
level=info ts=2021-04-01T08:34:36.789287805Z caller=server.go:229 http=[::]:3101 grpc=[::]:9095 msg="server listening on addresses"
level=info ts=2021-04-01T08:34:36.789499173Z caller=main.go:112 msg="Starting Promtail" version="(version=2.2.0, branch=HEAD, revision=a27c79913)"
[...truncated...]
ts=2021-04-01T08:34:42.041918277Z caller=log.go:124 level=info msg="Re-opening truncated file /var/log/pods/default_nginx-ingress-local-controller-78c48fc9f6-jh664_27fe488e-01dc-496b-a037-510c6ac74acd/nginx-ingress-controller/0.log ..."
ts=2021-04-01T08:34:42.042127803Z caller=log.go:124 level=info msg="Successfully reopened truncated /var/log/pods/default_nginx-ingress-local-controller-78c48fc9f6-jh664_27fe488e-01dc-496b-a037-510c6ac74acd/nginx-ingress-controller/0.log"
fatal error: concurrent map read and map write

goroutine 296 [running]:
runtime.throw(0x2c03e70, 0x21)
	/usr/local/go/src/runtime/panic.go:1116 +0x72 fp=0xc00008bbc0 sp=0xc00008bb90 pc=0x43ae72
runtime.mapaccess2_faststr(0x29d64e0, 0xc000a21590, 0x2bd2073, 0xd, 0x14c1c950e, 0x444a360)
	/usr/local/go/src/runtime/map_faststr.go:116 +0x4a5 fp=0xc00008bc30 sp=0xc00008bbc0 pc=0x4179e5
github.com/grafana/loki/pkg/promtail/client.(*client).getTenantID(...)
	/src/loki/pkg/promtail/client/client.go:375
github.com/grafana/loki/pkg/promtail/client.(*client).processEntry(0xc000b1d040, 0xc000a21590, 0xc0117f48916f2051, 0x14c1d844a, 0x444a360, 0xc001485680, 0x222, 0x0, 0x0, 0x0, ...)
	/src/loki/pkg/promtail/client/client.go:406 +0x8c fp=0xc00008bc80 sp=0xc00008bc30 pc=0xd29a0c
github.com/grafana/loki/pkg/promtail/client.(*client).run(0xc000b1d040)
	/src/loki/pkg/promtail/client/client.go:234 +0x285 fp=0xc00008bfd8 sp=0xc00008bc80 pc=0xd27545
runtime.goexit()
	/usr/local/go/src/runtime/asm_amd64.s:1374 +0x1 fp=0xc00008bfe0 sp=0xc00008bfd8 pc=0x473ae1
created by github.com/grafana/loki/pkg/promtail/client.New
	/src/loki/pkg/promtail/client/client.go:198 +0x4b2

The full log is over 1000 lines long, so I attached it as a file:
Promtail_crash_multiple_targets.txt

The Promtail config looks like this:

clients:
  - url: https://<loki1>/loki/api/v1/push
    basic_auth:
      username: <user>
      password: <pass>
  - url: https://<loki2>/loki/api/v1/push
    basic_auth:
      username: <user>
      password: <pass>

I configured it with the syntax described in the docs: https://grafana.com/docs/loki/latest/clients/promtail/configuration/#supported-contents-and-default-values-of-configyaml

It crashes 99% of the time immediately after startup, but sometimes it randomly works and pushes the logs to both Loki instances. I assume it's a synchronicity issue with that map object (would match the error message too).
Let me know if you need any other infos.

Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions