파트 III: 그라파나

이제 우리는 Prometheus를 실행하고 있으며 Grafana 클라우드 에이전트 덕분에 일부 메트릭을 거기로 보냅니다. 보다 편리한 방법으로 이러한 측정항목을 보는 방법은 무엇입니까?

네, 정답은 동급 최고의 작업 도구인 Grafana입니다. 그리고 Kubernetes 클러스터가 있으므로 이 클러스터 내에서 실행할 것입니다. Grafana는 리소스 집약적인 제품이 아니며 Amazon Managed Grafana와 같은 관리형 서비스보다 저렴합니다.

고집



Grafana에는 사용자, 대시보드 및 기타 항목을 위한 영구 저장소가 필요합니다. 영구 볼륨 청구를 사용할 수 있지만 다시 클러스터를 린 상태로 유지하려고 합니다. 따라서 다음 선택은 가장 작은 구성의 RDS입니다.

data "aws_caller_identity" "current" {}
data "aws_region" "current" {}

resource "random_password" "password" {
  length  = 32
  special = false
}

resource "aws_security_group" "this" {
  name   = "grafana_${var.environment}"
  vpc_id = var.vpc_id
}

resource "aws_security_group_rule" "egress_all" {
  type     = "egress"
  to_port  = 0
  protocol = "-1"
  cidr_blocks = [
    "0.0.0.0/0",
  ]
  from_port         = 0
  security_group_id = aws_security_group.this.id
}

resource "aws_security_group_rule" "ingress_posgres" {
  type                     = "ingress"
  to_port                  = 5432
  protocol                 = "tcp"
  source_security_group_id = var.source_security_group_id
  from_port                = 5432
  security_group_id        = aws_security_group.this.id
}

resource "aws_db_subnet_group" "this" {
  name       = "grafana-${var.environment}"
  subnet_ids = var.subnet_ids
}

resource "aws_db_instance" "this" {
  availability_zone    = var.availability_zone
  allocated_storage    = 10
  engine               = "postgres"
  engine_version       = var.postgres_engine_version
  instance_class       = var.postgres_instance_class
  identifier           = "grafana-${var.environment}"
  db_name              = "grafana"
  username             = "root"
  password             = random_password.password.result
  skip_final_snapshot  = true
  db_subnet_group_name = aws_db_subnet_group.this.name
  vpc_security_group_ids = [
    aws_security_group.this.id,
  ]
}


여기에서 첫 번째 장의 EC2 인스턴스와 몇 가지 유사점을 볼 수 있습니다. 다시 한 번 Kubernetes 클러스터에서만 통신을 허용하는 유일한 수신 규칙을 사용하여 별도의 보안 그룹을 만들었습니다.

싱글 사인온



Grafana는 다양한 싱글 사인온 옵션을 지원합니다. 이 글에서는 Gitlab을 사용할 것이지만 Github, 일부 일반 OIDC 솔루션 또는 내부 데이터베이스를 사용할 수 있습니다.

그라파나 설치



Grafana Helm 차트에 대한 값 파일을 준비합시다.

replicas: 1

grafana.ini:
  server:
    domain: grafana.<your domain name>
    root_url: https://grafana.<your domain name>/
    enforce_domain: true
    protocol: http
  auth.anonymous:
    enabled: false
  database:
    type: postgres
    host: <RDS endpoint from the previous steps>
    user: root
    password: <RDS password from the previous steps>
    name: grafana
    ssl_mode: require
    max_open_conn: 25
    max_idle_conn: 25
  unified_alerting:
    enabled: true
  alerting:
    enabled: false
  smtp:
    enabled: false
  users:
    auto_assign_org: true
  auth.gitlab:
    enabled: true
    allow_sign_up: true
    client_id: <id from the Gitlab app>
    client_secret: <secret from the Gitlab app>
    scopes: read_api
    auth_url: https://gitlab.com/oauth/authorize
    token_url: https://gitlab.com/oauth/token
    api_url: https://gitlab.com/api/v4
    allowed_groups: <your Gitlab group>

ingress:
  enabled: false

ingress.enabled 속성을 확인하십시오. 이 특정 인프라에서는 Traefik을 사용하므로 Ingress 개체를 만들 필요가 없습니다. 대신 간단한 IngressRoute 리소스를 만들었습니다.

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: grafana
  namespace: grafana
spec:
  entryPoints:
    - websecure
  routes:
  - match: Host(`grafana.<your domain name>`) && PathPrefix(`/`)
    kind: Rule
    priority: 1
    services:
    - name: grafana
      port: 80
      scheme: http


Nginx 수신 컨트롤러를 사용하는 경우 값에서 다시 활성화하기만 하면 됩니다.

ingress:
  enabled: true
  ingressClassName: nginx
  annotations: {}
    kubernetes.io/ingress.class: nginx
  labels: {}
  path: /
  pathType: Prefix
  hosts:
    - grafana.<your domain name>


당신은 내가 추측하는 드릴을 알고 있습니다. 간단한 Helm 명령으로 이것을 설치해 보겠습니다.

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade --install grafana grafana/grafana -n grafana -f values.yaml --version 6.21.4


그리고 그게 다야. 관리 작업을 위해서는 관리자 비밀번호가 한 가지 더 필요합니다.

kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo


Grafana에 Prometheus 데이터 소스 추가



이것은 아마도 가장 간단한 작업일 것입니다. 로그인하고 설정에서 데이터 소스 섹션을 열고 첫 번째 장에서 정의한 도메인 이름을 채우십시오.



포장하다



그리고 그게 다야! 다음 장에서는 Telegram 그룹에 alertmanager 알림을 전달하는 방법을 보여 드리겠습니다. 계속 지켜봐 주세요!

좋은 웹페이지 즐겨찾기