이 저장소는 Grafana 9+ 버전에서 사용할 수 있는 내장 플러그인인 상태 기록 및 상태 타임라인을 위해 보관되었습니다. 이러한 플러그인은 커뮤니티에서 flant-statusmap의 대체품으로 사용됩니다. 자세한 내용은 이슈 #302를 참조하세요. 이 플러그인이 귀하의 요구 사항에 적합하다고 생각하고 계속 개발하고 싶다면 자유롭게 포크를 만드십시오. 우리는 당신이 더 나아가는 것을 보고 싶습니다!
시간 경과에 따른 여러 대상의 개별 상태를 표시하는 패널입니다.
docker compose up
실행하고 브라우저에서 http://localhost:3000을 열어 간단한 데모를 확인하세요.
우리는 객체 상태의 변경 내역을 볼 수 있도록 일정 기간 동안 일련의 시계열 상태를 시각화해야 했습니다. 우리는 많은 Kubernetes 클러스터(및 관련 인프라)를 유지 관리하므로 이에 대한 주요 사례는 서버 및 Kubernetes 포드 상태의 시각화와 HTTP 서비스 상태 확인입니다. 우리는 사용 가능한 다양한 Grafana 플러그인을 시도했지만(아래 감사의 글 에 나열되어 있음) 그 중 어느 것도 우리가 찾고 있던 것과 매우 유사한 기능과 시각화를 제공하지 못했습니다.
주의: 이 게시물에서 플러그인 제작 과정에 대한 자세한 내용을 확인할 수 있습니다.
이 플러그인으로 시각화되는 개체는 IT 구성 요소(예: 서버 호스트 및 Kubernetes 포드)뿐만 아니라 위 그림의 커피 메이커와 같이 상상할 수 있는 모든 것과 다를 수 있습니다. 이러한 개체에는 사전 정의된 값 집합인 개별 상태가 있어야 합니다(예: ok
= 0, off
= 1, fail
= 2 등).
깔끔한 그래프를 만들려면 데이터 소스가 좋은 데이터를 반환해야 합니다. 플러그인은 패널 옵션의 버킷 너비에 따라 $__interval
변수를 조정합니다. 쿼리는 $__interval
동안 상태를 집계해야 합니다.
다중 값 모드가 예상대로 작동하도록 하려면 여러 쿼리를 정의해야 합니다. 즉, 가능한 각 상태에 대해 하나의 쿼리를 정의해야 합니다.
플러그인은 현재 시간에 맞춰 데이터를 집계하지 않으며 입력 데이터만 버킷으로 렌더링합니다. 이 때문에 데이터에는 시간 범위의 각 타임스탬프에 대한 포인트와 가능한 모든 대상(y축 레이블)에 대한 동일한 타임스탬프가 포함되어야 합니다. 이 제한 사항은 문제 #53으로 해결되었습니다.
Prometheus의 데이터로 작업하려면 개체에 대해 개별 상태를 설정해야 합니다. 이러한 상태를 지표에 저장하기 위한 요구 사항은 다음과 같습니다.
0
과 1
이라는 두 가지 값이 있어야 합니다.완료되면 쿼리를 통해 모든 데이터를 수집할 수 있습니다. 예:
(max_over_time(coffee_maker_status{status=""}[$__interval]) == 1) *
쿼리 간격 동안 이러한 상태(
)가 없으면 Prometheus는 아무것도 반환하지 않습니다. 그렇지 않으면 상태' 값이 반환됩니다.
예를 들어 5가지 유형의 상태와 5가지 허용 값( 0
, 1
, 2
, 3
, 4
)이 있는 측정항목( coffee_maker_status
)이 있는 경우 다음 규칙을 사용하여 이 측정항목을 변환해야 합니다.
- record: coffee_maker_status:discrete
expr: |
count_values("status", coffee_maker_status)
값이 3
인 coffee_maker_status
측정항목이 새로운 측정항목으로 변환되는 방식은 다음과 같습니다.
coffee_maker_status:discrete{status="3"} 1
이제 Prometheus가 각 상태에 대해 0
과 1
값을 가지면 이러한 모든 지표를 집계할 수 있으므로 시간이 지남에 따라 개체에 대해 사용 가능한 모든 상태를 얻을 수 있습니다.
'형식'으로 '시계열'을 선택하고 쿼리에 GROUP BY ($__interval)
사용합니다. $tag_
'Alias by'에서 y축 레이블을 정의하는 데 사용할 수 있습니다.
$__interval
에 대한 집계를 사용한 예제 쿼리는 다음과 같습니다(가능한 각 상태 값에 대해 하나의 쿼리가 필요함).
SELECT
$__timeGroupAlias(date_insert,$__interval),
name AS metric,
min(statusi) AS "statusi"
FROM coffee_makers
WHERE
$__timeFilter(date_insert) AND statusi=1
GROUP BY 1,2
ORDER BY $__timeGroup(date_insert,$__interval)
metric
열은 y축 레이블로 사용됩니다.
우선, 가능한 각 상태 값에 대한 개별 쿼리를 생성해야 합니다. 각 쿼리에는 그룹화를 위한 유사한 범례도 있어야 합니다.
그런 다음 상태 값에 대한 색상 매핑을 개별 색상 모드에서 정의해야 합니다.
사전 설정을 사용하여 신호등 색상 또는 태양광 팔레트의 8가지 색상을 정의할 수 있습니다.
참고: 스펙트럼 및 불투명도 색상 모드는 히트맵 플러그인과 동일한 방식으로 작동합니다.
다중 값 확인란은 표시 방법을 지정합니다.
표시 Null은 빈 버킷으로 처리되거나 0
값의 색상으로 표시될 수 있습니다.
최소 너비 와 간격은 최소 버킷 너비와 버킷 사이의 간격을 지정하는 데 사용됩니다. 라운딩은 모서리를 둥글게 만드는 데 사용될 수 있습니다.
지정된 시계열의 값만 표시하려면 값 인덱스를 양수로 설정합니다.
범례 표시 확인란을 선택하면 패널 하단의 범례가 전환됩니다.
행 정렬을 사용하여 Y축에서 레이블을 정렬할 수 있습니다. 지표 — 지표 탭에 정의된 대로 y 레이블을 정렬합니다. a→z 및 z→a 레이블을 자연 순서로 내림차순 또는 오름차순으로 정렬합니다.
페이지 매김 활성화는 그래프의 페이지 매김 컨트롤을 전환합니다.
페이지당 행 그래프에 표시할 행 수입니다.
도구 설명 표시는 버킷 위에 마우스를 놓으면 도구 설명 표시를 전환합니다.
클릭 시 고정은 클릭 시 툴팁 "고정"을 전환합니다. 고정된 도구 설명은 데이터를 부동 도구 설명과 비교하거나 URL을 따라가는 데 사용할 수 있습니다.
항목 표시는 도구 설명의 추가 항목 표시를 전환합니다.
항목은 도구 설명에 URL을 표시하기 위한 정의 목록입니다.
각 URL에는 템플릿, 아이콘, 라벨 및 서식 옵션(변수에 대한 소문자 및 날짜 형식)이 있습니다.
일부 시나리오에서는 근본/원인 분석을 수행할 때와 같이 상태 패널을 사용하여 하나의 대시보드에서 보다 구체적인 대시보드로 이동합니다. 이러한 경우 사용자는 원하는 이벤트를 중앙에 유지하면서 시간 범위의 범위를 줄이고 싶을 수 있습니다(시간의 이전/후방 버킷을 분석할 수 있도록). 이러한 값은 __bucket_from
및 __bucket_to
를 통해 도입됩니다.
__bucket_from
: bucket.from
의 값에서 백분율 버킷을 뺀 값입니다. __bucket_to
: bucket.to
값에 백분율 버킷을 더한 값입니다.
이 플러그인의 첫 번째 공개 릴리스는 Flant 엔지니어에 의해 완전히 제작되었습니다. 전체 아이디어는 Dmitry Stolyarov(@distol)에서 나왔고, 초기 버전은 Sergey Gnuskov(@gsmetal)가 작성했으며, 최종 변경 사항은 Ivan Mikheykin(@diafour)이 작성했습니다.
이 플러그인은 Grafana의 "Heatmap" 패널을 기반으로 하며 Carpet 플롯, Discrete 패널, Status 패널, Status Dot, Status By Group의 아이디어에서 부분적으로 영감을 받았습니다.