#kubernetes #microservices #prometheus #kubernetes-helm #prometheus-operator
#кубернетес #микросервисы #prometheus #kubernetes-рулевой #prometheus-operator #kubernetes
Вопрос:
Я развертываю Prometheus-operator в своем кластере с помощью диаграммы Helm, но я внедряю пользовательский сервис для мониторинга моего приложения, мне нужно добавить свой сервис в Prometheus-operator, чтобы увидеть данные моих показателей.
Как я могу это сделать?
Ответ №1:
Сначала вам необходимо развернуть Prometheus-operator с помощью Helm или вручную:
# By Helm:
$ helm install stable/prometheus-operator --generate-name
# By manual: for release `release-0.41`
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/release-0.41/bundle.yaml
Если в вашем кластере включен RBAC, вам необходимо установить RBAC для Prometheus
объекта:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/metrics
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources:
- configmaps
verbs: ["get"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: prometheus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus
subjects:
- kind: ServiceAccount
name: prometheus
namespace: default
Затем вам нужно развернуть Promethues
объект:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
labels:
prometheus: prometheus
spec:
replicas: 1
serviceAccountName: prometheus
serviceMonitorSelector:
matchLabels:
k8s-app: prometheus
serviceMonitorNamespaceSelector:
matchLabels:
prometheus: prometheus
resources:
requests:
memory: 400Mi
Здесь Prometheus
объект выберет все ServiceMonitor
, которые соответствуют приведенным ниже условиям:
ServiceMonitor
будет иметьk8s-app: prometheus
метку.ServiceMonitor
будут созданы в тех пространствах имен, которые имеютprometheus: prometheus
метку.
ServiceMonitor имеет селектор меток для выбора сервисов и их базовых конечных объектов. Объект Service для примера приложения выбирает модули по app
метке, имеющей example-app
значение. Объект Service также указывает порт, на котором отображаются показатели.
kind: Service
apiVersion: v1
metadata:
name: example-app
labels:
app: example-app
spec:
selector:
app: example-app
ports:
- name: web
port: 8080
Этот сервисный объект обнаруживается ServiceMonitor, который выбирает таким же образом. app
Метка должна иметь значение example-app
.
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-app
labels:
k8s-app: prometheus
spec:
selector:
matchLabels:
app: example-app
namespaceSelector:
# matchNames:
# - demo
any: true
endpoints:
- port: web
Здесь namespaceSelector
используется для выбора всех пространств имен, в которых создается сервис. вы можете указать конкретное любое пространство имен с помощью matchNames
.
Вы также можете создать ServiceMonitor
в любом пространстве имен по своему усмотрению. Но вам нужно указать это в Prometheus
cr spec
, например:
serviceMonitorNamespaceSelector:
matchLabels:
prometheus: prometheus
Вышеуказанное serviceMonitorNamespaceSelector
используется в Prometheus
operator для выбора того пространства имен, в котором есть метка prometheus: prometheus
. Предположим, у вас есть пространство имен, demo
и в этом demo
пространстве имен вы создали Prometheus
затем вам нужно добавить метку prometheus: prometheus
в demo
пространство имен с помощью patch:
$ kubectl patch namespace demo -p '{"metadata":{"labels": {"prometheus":"prometheus"}}}'
Вы можете найти более подробную информацию здесь:
Комментарии:
1. спасибо, если у меня есть Prometheus в другом пространстве имен и мой сервис в пространстве имен по умолчанию, что я меняю?
2. Я обновил свой ответ и добавил новую ссылку. возможно, вы найдете свой ответ из приведенного выше ответа.
3. спасибо, но теперь, после применения вашего решения, Prometheus Service Discovery получает >>> monitoring/sg-prometheus-rabbitmq-exporter/0 (0/16 активных целей) — это мой сервис, и данные не отображаются в Prometheus
4. мой сервис — это селектор: app =prometheus-rabbitmq-exporter,release=sg-prometheus-rabbitmq-exporter Тип: ClusterIP IP: 10.3.144.40 Порт: rabbitmq-exporter 9419 / TCP targetPort: публикация / Конечные точки TCP: 10.2.0.47: 9419 Привязка к сеансу: Отсутствует
5. мой ServiceMonitor — это apiVersion: monitoring.coreos.com/v1 вид: метаданные ServiceMonitor: имя: sg-prometheus-rabbitmq-exporter метки: k8s-приложение: prometheus релиз: sg-prometheus-operator спецификация: конечные точки: — путь: /metrics порт: веб-селектор: Соответствующие метки: приложение: prometheus-rabbitmq-exporter релиз: sg-prometheus-rabbitmq-exporter