• 검색 결과가 없습니다.

Monitoring with Prometheus 11

N/A
N/A
Protected

Academic year: 2022

Share "Monitoring with Prometheus 11"

Copied!
39
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

1

th

유원조 wonjo.yoo@oracle.com 2020.05.15

11 th Oracle Developer

Meetup

Monitoring with

Prometheus

(2)

Prometheus 알아보기

Agenda

1

2 OKE에서Prometheus 와 Grafana로 모니터링

© 2019 Oracle and/or its affiliates. All rights reserved.

2

(3)

Prometheus 알아보기

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 3

(4)

Prometheus란

Prometheus는 오픈 소스 모니터링

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 4

Metric기반 지표를 수집하여 저장,검색

쉬운 운영, 강력한 쿼리 기능, Grafana를 통한 시각화, 많은 Integration CNCF Graduate, 폭넓은 CNCF 생태계

(5)

모니터링의 범주

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 5

Profiling : 제한된 기간의 일부 리소스 분석 (예: tcpdump)

Tracing : 특정 이벤트를 추적, HTTP요청->Database -> Cache Server (타이밍)

분산 트레이싱 : Zipkin, Jaeger

Logging : Transaction, Request, Application

Metric : 다양한 유형의 이벤트를 시간별로 집계 예) HTTP요청 횟수,처리시간

(6)

Prometheus 아키텍처

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 6

(7)

Metric 수집

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 7

클라이언트 라이브러리

공식 : Go, Java, Python, Ruby

Unofficial

Bash, C, C++, Common Lisp, Dart, Elixir, Erlang, Haskell, .NET / C#, Node.js, Perl, PHP, R, Rust

Application

Exporter

3r’d Party SW

Prometheus

데이터 수집 서비스 검색 클라이언트

라이브러리

저장장치 Direct Instrument

pull

local on-disk time series database

(8)

Prometheus 실행

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 8

https://prometheus.io/download/

다운로드 tar -xzf prometheus-*.linux-amd64.tar.gz

cd prometheus-*.linux-amd64 ./prometheus

설정파일 : prometheus.yml global:

scrape_interval: 15s scrape_timeout: 10s scrape_configs:

- job_name: 'prometheus' metrics_path: /metrics scheme: http

static_configs:

- targets: ['localhost:9090']

http://localhost:9090/metrics

(9)

Prometheus GUI

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 9

Prometheus 자체 프로세스에 대해서 metric을 계속 수집 중

Value는 float64 라벨(Label) : 동일한 데이터에서 종류를 구분하기 위한 식별자

조회할 메트릭 선택 PromQL

(10)

Prometheus 데이터

Metric 이름 Label 이름=Label Value, …

(11)

PromQL

(12)

PromQL

[1m] : 현재 시간 기준으로 이전 1분 동안의 데이터 조회

prometheus_http_requests_total[1m]

s, m, h, d, w, y

정규 표현식

{job=~".*",method="get"}

가장 많이 사용하는 함수 : sum, avg, rate

sum(prometheus_http_requests_total)

(13)

Prometheus GUI

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 13

Status à Target 클릭 현재 모니터링 대상으로 Prometheus 자체

(14)

Prometheus GUI – 측정 metric 확인

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 14

Prometheus자체도

metrics으로 계측이 되고 있음.

scrape_configs:

- job_name: 'prometheus' metrics_path: /metrics scheme: http

static_configs:

- targets: ['localhost:9090']

(15)

Prometheus GUI – Graph

Gauge

메모리 사용량과 같이 현재 값을 표시

(16)

Prometheus GUI – Graph

Counter

총 요청수 처럼 지속적으로 증가하는 값

(17)

다양한 Exporter 제공

Databases

•Aerospike exporter

•ClickHouse exporter

•Consul exporter(official)

•Couchbase exporter

•CouchDB exporter

•ElasticSearch exporter

•EventStore exporter

•Memcached exporter(official)

•MongoDB exporter

•MSSQL server exporter

•MySQL router exporter

•MySQL server exporter(official)

•OpenTSDB Exporter

•Oracle DB Exporter

•PgBouncer exporter

•PostgreSQL exporter

•Presto exporter

•ProxySQL exporter

•RavenDB exporter

•Redis exporter

•RethinkDB exporter

•SQL exporter

•Tarantool metric library

•Twemproxy

Hardware related

•apcupsd exporter

•BIG-IP exporter

•Collins exporter

•Dell Hardware OMSA exporter

•IBM Z HMC exporter

•IoT Edison exporter

•IPMI exporter

•knxd exporter

•Modbus exporter

•Netgear Cable Modem Exporter

•Netgear Router exporter

•Node/system metrics exporter(official)

•NVIDIA GPU exporter

•ProSAFE exporter

•Ubiquiti UniFi exporter Storage

•Ceph exporter

•Ceph RADOSGW exporter

•Gluster exporter

•Hadoop HDFS FSImage exporter

•Lustre exporter

•ScaleIO exporter

Issue trackers and continuous integration

Bamboo exporter

•Bitbucket exporter

•Confluence exporter

•Jenkins exporter

•JIRA exporter Messaging systems

•Beanstalkd exporter

•EMQ exporter

•Gearman exporter

IBM MQ exporter

•Kafka exporter

•NATS exporter

•NSQ exporter

•Mirth Connect exporter

MQTT blackbox exporter

•RabbitMQ exporter

•RabbitMQ Management Plugin exporter

•RocketMQ exporter

•Solace exporter HTTP

Apache exporter

•HAProxy exporter(official)

Nginx metric library

•Nginx VTS exporter

•Passenger exporter

Squid exporter

•Tinyproxy exporter

Varnish exporter

•WebDriver exporter

APIs

•AWS ECS exporter

AWS Health exporter

•AWS SQS exporter

•Azure Health exporter

•BigBlueButton

•Cloudflare exporter

DigitalOcean exporter

•Docker Cloud exporter

•Docker Hub exporter

•GitHub exporter

•InstaClustr exporter

Mozilla Observatory exporter

•OpenWeatherMap exporter

•Pagespeed exporter

•Rancher exporter

•Speedtest exporter

Tankerkönig API Exporter Logging

•Fluentd exporter

•Google's mtail log data extractor

•Grok exporter

(18)

Node Exporter

https://prometheus.io/download/

에서 다운로드 tar -xzf node_exporter*.linux-amd64.tar.gz

cd node_exporter-*.linux-amd64 ./node_exporter

노드의 Metric을 수집

CPU,메모리,디스크공간,I/O, 네트워크 대역폭

설정파일(prometheus.yml)에 아래 추가 global:

scrape_interval: 15s scrape_timeout: 10s scrape_configs:

- job_name: 'prometheus' metrics_path: /metrics scheme: 'http'

static_configs:

- targets: ['localhost:9090']

- job_name: 'node' static_configs:

- targets: ['localhost:9100']

(19)

Node Exporter

Node 1개가 모니터링 Target으로 새롭게 추가됨

Node Exporter의 metric 정보

(20)

PromQL 을 사용한 Graph

Node_exporter에 의해 추가된 값 network interface별로 수신된 데 이터를 표시하는 Counter

PromQL의 rate() 함수: 증가율

(21)

클라이언트 Library를 이용한 Direct Instrument (Python)

import http.server

class MyHandler(http.server.BaseHTTPRequestHandler):

def do_GET(self):

self.send_response(200) self.end_headers()

self.wfile.write(b"Hello World") if __name__ == "__main__":

server = http.server.HTTPServer(('localhost', 8001), MyHandler) server.serve_forever()

(22)

클라이언트 Library를 이용한 Direct Instrument (Python)

Application

클라이언트 라이브러리

Direct Instrument 라이브러리 설치 : pip install prometheus_client

import http.server

from prometheus_client import start_http_server

class MyHandler(http.server.BaseHTTPRequestHandler):

def do_GET(self):

self.send_response(200) self.end_headers()

self.wfile.write(b"Hello World") if __name__ == "__main__":

start_http_server(8000)

server = http.server.HTTPServer(('localhost', 8001), MyHandler) server.serve_forever()

(23)

클라이언트 Library를 이용한 Direct Instrument (Python)

prometheus.yml 에 job 추가

global:

scrape_interval: 15s scrape_timeout: 10s scrape_configs:

- job_name: 'prometheus' metrics_path: /metrics scheme: http

static_configs:

- targets:

- localhost:9090 - job_name: 'example'

static_configs:

- targets: ['localhost:8000'] python_info 조회 가능

(24)

클라이언트 Library를 이용한 Direct Instrument(Python) – Counter 추가

import http.server

from prometheus_client import start_http_server from prometheus_client import Counter

REQUESTS = Counter('hello_worlds_total’, 'Hello Worlds requested.')

class MyHandler(http.server.BaseHTTPRequestHandler):

def do_GET(self):

REQUESTS.inc()

self.send_response(200) self.end_headers()

self.wfile.write(b"Hello World") if __name__ == "__main__":

start_http_server(8000)

server = http.server.HTTPServer(('localhost', 8001), MyHandler) server.serve_forever()

Metric 정의. Counter 설명

Instrument 부분: Metric이 사용(호출) 됨 Inc()는 카운터 값 1 증가. Thread Safe 보장 URL 호출 시 마다 값이 1씩 증가됨

(25)

Metric 종류

Counter

Gauge : 현재 상태 표시. 예) 현재 대기열 수, 캐시 메모리 사용량, 활성 Thread수 주요 메소드 : inc, dec, set

Summary : 측정된 값을 전부 합한 값. 주로 대기 시간을 측정하는데 사용 Histogram : 분포도 값 반환

(26)

클라이언트 Library를 이용한 Direct Instrument(Java)

import io.prometheus.client.Counter;

import io.prometheus.client.hotspot.DefaultExports;

import io.prometheus.client.exporter.HTTPServer;

public class Example {

private static final CountermyCounter = Counter.build() .name("my_counter_total")

.help("An example counter.").register();

public static void main(String[] args) throws Exception { DefaultExports.initialize();

HTTPServer server = new HTTPServer(8000);

while (true) { myCounter.inc();

Thread.sleep(1000);

}} }

(27)

DEMO

Node exporter + Custom exporter

(28)

OKE에서

Prometheus 와 Grafana로 모니터링

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 28

(29)

Service Discovery를 통한 Kubernetes monitoring

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 29

Target Auto Discovery Pull Datasource

Pull

Kubernetes Nodes

Kubernetes Master API Server

Grafana Dashboard kubernetes_sd_config

(30)

Prometheus Operator

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted

30 Source:prometheus-operator

Kubernetes Operator를 사용하여 Prometheus 용 모니터링 인스턴스를 자동으로 생성/관리

Kubernetes 에 Prometheus Operator 설치 Prometheus Pod를 생성

대상 scrape config 를 자동으로 생성 어떤 그룹의 서비스를 모니터링 할지

Prometheus ServiceMonitor PodMonitor

PrometheusRule Alertmanager

(31)

OKE(Container Engine for Kubernetes) 에 설치 – Demo 구성도

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 31

Oracle Kubernetes Engine

Monitoring namespace Private

Subnet Public

Subnet

Prometheus Service (Type=LoadBalancer)

Grafana Service (Type=LoadBalancer)

Prometheus Pod

Grafana Pod

Load Balancer

VCN

prometheus-kube-state-metrics

prometheus-node-exporter

alertmanager

(32)

OKE(Oracle Kubernetes Engine) 사용하기

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 32

1. OCI CLI 설치

2. Local에 Kube config 설정 (Cluster서버 정보 및 인증서, region) 3. oke-admin 계정 생성 및 RBAC 권한 부여

4. kubectl proxy 로 Local에서 Kubernetes dashboard 실행 à Local에 8001 포트로 Listen하고 Remote로 forwarding

kubectl get nodes

NAME STATUS ROLES AGE VERSION

10.0.10.2 Ready node 127m v1.15.7 OCI CLI

./kube/config kubectl 생성

Oracle Cloud OKE

(33)

Kubernetes Cluster

Helm 이란?

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 33

Helm Client

Helm Server Tiller RepositoryHelm

Chart Chart

Release

Tiller는 v3에서 제거됨.

Oracle OCI는 Helm v2를 지원함.

Helm Repository 관리

Chart 개발

Tiller와 통신하여

Kubernetes의 Chart 관리

gRPC Docker

Image Repository

Github / ChartMuseum

(34)

OKE 에 Prometheus 설치 순서

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 34

1. Helm chart repository update

helm repo add stable https://kubernetes-charts.storage.googleapis.com helm repo update

2. Helm으로 Prometheus + Grafana 설치

helm install --name kube-prometheus --namespace monitoring stable/prometheus-operator 3. 설치된 Pod 확인

kubectl --namespace monitoring get pods -l "release=kube-prometheus"

https://github.com/helm/charts/tree/master/stable/prometheus-operator

(35)

OKE 에 설치 – Load Balancer에 연결하기

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 35

> kubectl edit svc kube-prometheus-prometheus-prometheus -n monitoring

apiVersion: v1 kind: Service metadata:

name: kube-prometheus-prometheus-prometheus namespace: monitoring

resourceVersion: "48861"

spec:

clusterIP: 10.96.160.249 ports:

- name: web port: 9090 protocol: TCP targetPort: 9090 selector:

app: prometheus

prometheus: kube-prometheus-prometheus-prometheus sessionAffinity: None

type: ClusterIP status:

loadBalancer: {}

annotations:

service.beta.kubernetes.io/oci-load-balancer-shape: "100Mbps"

service.beta.kubernetes.io/oci-load-balancer-backend-protocol: "HTTP"

spec:

type: LoadBalancer 추가

변경

> kubectl edit svc kube-prometheus-grafana -n monitoring

1. Prometheus 서비스 OCI Load Balancer 로 연결하기 2. Grafana 서비스 OCI Load balancer 로 연결하기

(36)

서비스 확인

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 36

kubectl get svc -n monitoring

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 167m

kube-prometheus-grafana LoadBalancer 10.96.120.86 129.213.68.145 80:32149/TCP 167m kube-prometheus-kube-state-metrics ClusterIP 10.96.18.114 <none> 8080/TCP 167m

kube-prometheus-prometheus-alertmanager ClusterIP 10.96.93.30 <none> 9093/TCP 167m kube-prometheus-prometheus-node-exporter ClusterIP 10.96.64.239 <none> 9100/TCP 167m kube-prometheus-prometheus-operator ClusterIP 10.96.185.165 <none> 8080/TCP,443/TCP 167m

kube-prometheus-prometheus-prometheus LoadBalancer 10.96.86.59 150.136.188.146 9090:31284/TCP 167m prometheus-operated ClusterIP None <none> 9090/TCP 166m

(37)

서비스 확인

Confidential – © 2020 Oracle Internal/Restricted/Highly Restricted 37

(38)

DEMO

OKE + Prometheus + Grafana

(39)

Thank you

Confidential – © 2019 Oracle Internal/Restricted/Highly Restricted 39

참조

관련 문서

Use Tanzu Application Catalog and deploy open source with confidence:. Align Developers and IT around velocity,

Kubernetes 클러스터 노드가 실패하면 PKS 가 노드를 다시 빌드하고 클러스터를 재구성하며 Kubernetes Control Plane 은 작업 노드에서 포드를 다시 예약. 포트가

운영 목적: 미세먼지 감축을 위한 스마트 교실 운영(미세 먼지 측정과 스마트 교실 운 영 자료 제작, YSC 동아리 활동 보고서 작성) 프로그램으로 학생들이

생수를 생산하는 기업에게는 플라스틱병 제조비용을 절감할 수 있는 장점이, 버리더라도 자연 분해되기 때문에 환경에도 해가 되지 않는 착한 물병이다..

이에 본 프로그램은 학생들이 식물을 기를 수 있는 화분을 3D모델링을 통해 제작 하고 마이크로비트와 토양습도센서를 이용해 스마트 화분을 만들어 식물을

: 다양한 교과들이 융합하여 하나의 실생활에 활용할 수 있는 실용적이면서도 완성도 있는 제품을 제작하므로 과학적 원리를 이해하고, 과학적 원리의 배움의

RWC (Restricted Work Case): Injuries by which workers are reassigned to other duties or cannot perform the full range of normal duties MTC (Medical Treatment Case):

RWC (Restricted Work Case): Injuries by which workers are reassigned to other duties or cannot perform the full range of normal duties MTC (Medical Treatment Case):