Theory
인프라
Loki 공식 문서 번역
setup
Istio에 설치

Istio에 설치

원본: https://grafana.com/docs/loki/latest/setup/install/istio/ (opens in a new tab)

Istio 서비스 메시에 Loki를 설치할 때는 몇 가지 추가 단계를 완료해야 합니다. 이러한 단계 없이는 인제스터, 쿼리어 등이 시작될 수 있지만 다음과 같은 로그가 표시됩니다.

loki level=debug ts=2021-11-24T11:33:37.352544925Z caller=broadcast.go:48 msg="Invalidating forwarded broadcast" key=collectors/distributor version=123 oldVersion=122 content=[loki-distributor-59c4896444-t9t6g[] oldContent=[loki-distributor-59c4896444-t9t6g[]

이는 파드가 링에 참여하지 못하고 있음을 의미합니다.

lokiGrafana 데이터 소스에 추가하려고 하면 다음과 같은 로그가 표시됩니다(empty ring).

"loki level=warn ts=2021-11-24T08:02:42.08262122Z caller=logging.go:72 traceID=3fc821042d8ada1a orgID=fake msg=\"GET /loki/api/v1/labels?end=1637740962079859431&start=1637740361925000000 (500) 97.4µs Response: \\\"empty ring\\\\n\\\" ws: false; X-Scope-Orgid: fake; uber-trace-id: 3fc821042d8ada1a:1feed8872deea75c:1180f95a8235bb6c:0; \""

Loki가 실행 중인 네임스페이스에서 istio-injection을 활성화하면 Loki 서비스에 대한 구성도 수정해야 합니다. Istio는 파드가 IP 주소를 사용하여 다른 파드를 확인하는 것을 허용하지 않으므로 memberlist 서비스도 수정해야 합니다.

필요한 변경 사항

쿼리 프론트엔드 서비스

Loki 쿼리 프론트엔드 서비스용 파일을 다음과 같이 수정합니다.

apiVersion: v1
kind: Service
metadata:
  labels:
    app: loki-query-frontend
    app.kubernetes.io/instance: observability
    app.kubernetes.io/name: loki-query-frontend
spec:
  ports:
    - appProtocol: http
      name: http
      port: 3100
      protocol: TCP
      targetPort: http
    - appProtocol: tcp
      name: grpclb
      port: 9095
      protocol: TCP
      targetPort: grpc
  publishNotReadyAddresses: true
  selector:
    app: loki-query-frontend
    app.kubernetes.io/instance: observability
    app.kubernetes.io/name: loki-query-frontend
  type: ClusterIP

쿼리어 서비스

Loki 쿼리어 서비스용 파일을 다음과 같이 수정합니다.

  • grpc 서비스의 appProtocoltcp로 설정합니다.
apiVersion: v1
kind: Service
metadata:
  labels:
    app: loki-querier
    app.kubernetes.io/instance: observability
    app.kubernetes.io/name: loki-querier
  name: loki-querier
  namespace: observability
spec:
  ports:
    - appProtocol: http
      name: http
      port: 3100
      protocol: TCP
      targetPort: http
    - appProtocol: tcp
      name: grpc
      port: 9095
      protocol: TCP
      targetPort: grpc
  selector:
    app: loki-querier
    app.kubernetes.io/instance: observability
    app.kubernetes.io/name: loki-querier
  type: ClusterIP

인제스터 서비스 및 인제스터 헤드리스 서비스

Loki 쿼리 인제스터 및 인제스터 헤드리스 서비스용 파일을 다음과 같이 수정합니다.

  • grpc 포트의 appProtocoltcp로 설정합니다.
apiVersion: v1
kind: Service
metadata:
  labels:
    app: loki-ingester-(headless)
    app.kubernetes.io/instance: observability
    app.kubernetes.io/name: loki-ingester
  name: loki-ingester-headless
spec:
  clusterIP: None #(if headless)
  ports:
    - name: http
      port: 3100
      protocol: TCP
      targetPort: http
    - appProtocol: tcp
      name: grpc
      port: 9095
      protocol: TCP
      targetPort: grpc
  selector:
    app: loki-ingester
    app.kubernetes.io/instance: observability
    app.kubernetes.io/name: loki-ingester
  type: ClusterIP

디스트리뷰터 서비스

Loki 디스트리뷰터 서비스용 파일을 다음과 같이 수정합니다.

  • grpc 포트의 appProtocoltcp로 설정합니다.
apiVersion: v1
kind: Service
metadata:
  labels:
    app: loki-distributor
    app.kubernetes.io/instance: observability
    app.kubernetes.io/name: loki-distributor
spec:
  ports:
    - name: http
      port: 3100
      protocol: TCP
      targetPort: http
    - name: grpc
      port: 9095
      protocol: TCP
      targetPort: grpc
      appProtocol: tcp
  selector:
    app: loki-distributor
    app.kubernetes.io/instance: observability
    app.kubernetes.io/name: loki-distributor
  sessionAffinity: None
  type: ClusterIP

멤버리스트 서비스

멤버리스트 서비스용 파일을 다음과 같이 수정합니다.

  • http 포트의 appProtocoltcp로 설정합니다.
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/instance: observability
  name: loki-memberlist
  namespace: observability
spec:
  clusterIP: None
  ports:
    - name: http
      port: 7946
      protocol: TCP
      targetPort: 7946
      appProtocol: tcp
  selector:
    app.kubernetes.io/instance: observability
    app.kubernetes.io/part-of: memberlist