파트 III: 그라파나
14155 단어 devopsobservabilityinfrastructure
네, 정답은 동급 최고의 작업 도구인 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 알림을 전달하는 방법을 보여 드리겠습니다. 계속 지켜봐 주세요!
Reference
이 문제에 관하여(파트 III: 그라파나), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/stepanvrany/part-iii-grafana-1dea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)