반응형
PostgreSQL Query Discussion
SELECT
datname AS "metric",
count(datname) AS "Value",
date_trunc('minute', xact_start) AS time
FROM
pg_stat_activity
GROUP BY
datname,
xact_start
ORDER BY
xact_start
쿼리는 Invalid type for column time, must be of type timestamp or unix timestamp, got: 에러

Assistant: 죄송합니다. pg_stat_activity 테이블에서 트랜잭션이 시작되지 않은 세션의 xact_start 값은 NULL일 수 있습니다. 이를 방지하기 위해 xact_startNULL이 아닌 경우에만 집계하도록 필터링을 추가해야 합니다. 또한, Grafana에서 요구하는 형식에 맞게 time 열을 적절히 처리해야 합니다.

다음은 xact_startNULL이 아닌 경우에만 데이터를 집계하여 Grafana에서 사용할 수 있는 쿼리입니다:

SELECT
  date_trunc('minute', xact_start) AS time,
  datname AS metric,
  count(*) AS value
FROM
  pg_stat_activity
WHERE
  xact_start IS NOT NULL
GROUP BY
  time, datname
ORDER BY
  time

이 쿼리는 다음과 같은 기능을 합니다:

  • date_trunc('minute', xact_start)를 사용하여 xact_start를 분 단위로 잘라냅니다.
  • xact_startNULL이 아닌 경우에만 데이터를 필터링합니다.
  • 각 데이터베이스(datname)별로 트랜잭션의 수(count(*))를 집계합니다.
  • 결과를 시간(time)을 기준으로 정렬합니다.

이렇게 하면 Grafana가 요구하는 시계열 데이터 형식에 맞게 데이터를 준비할 수 있습니다. 이 쿼리를 Grafana에 입력하면 시계열 패널에 각 데이터베이스의 트랜잭션 수를 시간별로 시각화할 수 있습니다.

반응형
반응형
PostgreSQL Query Discussion

Assistant: Grafana 패널에 시계열 데이터를 시각화하려면 해당 시계열 데이터를 쿼리하여 Grafana가 이해할 수 있는 형식으로 가져와야 합니다. PostgreSQL의 pg_stat_activity 테이블에서 데이터베이스 이름(datname)과 트랜잭션 시작 시간(xact_start)을 사용하여 시계열 데이터를 추출하는 쿼리를 작성할 수 있습니다.

다음은 Grafana 패널을 만드는 데 사용할 수 있는 쿼리 예제입니다:

SELECT
  datname AS "Database",
  count(datname) AS "Session Count",
  xact_start AS "Transaction Start Time"
FROM
  pg_stat_activity
GROUP BY
  datname,
  xact_start
ORDER BY
  xact_start

이 쿼리는 각 데이터베이스 별 세션 수와 각 트랜잭션의 시작 시간을 반환합니다. Grafana에서 이 쿼리를 사용하여 시계열 데이터를 시각화할 수 있습니다. 데이터베이스 별로 세션 수의 변화와 각 트랜잭션의 시작 시간을 시계열 차트에 표시할 수 있습니다.

User: Value column must have numeric datatype, column: Database type: string value: postgres 이런 에러가 발생하네

Assistant: 죄송합니다. Grafana의 시계열 패널에서 사용하는 쿼리는 시간(timestamp), 메트릭(metric), 값(value)의 세 가지 필드가 필요합니다. datname 필드는 문자열 타입이므로 메트릭으로 사용할 수 없습니다. 대신, 각 데이터베이스의 트랜잭션 수를 시간별로 집계하여 표시해야 합니다.

이를 위해서는 xact_start의 시간 부분을 기준으로 세션 수를 집계해야 합니다. 다음은 이러한 쿼리를 작성하는 방법입니다:

SELECT
  date_trunc('minute', xact_start) AS time,
  datname AS metric,
  count(*) AS value
FROM
  pg_stat_activity
WHERE
  xact_start IS NOT NULL
GROUP BY
  time, datname
ORDER BY
  time

이 쿼리는 xact_start를 분 단위로 잘라서(time) 각 데이터베이스(datname) 별로 트랜잭션 수(count(*))를 집계합니다. 이렇게 하면 Grafana에서 시계열 차트로 시각화할 수 있습니다.

반응형
반응형

 

 

User: postgresql이 pg_stat_activity 테이블에서 xact_start, querystart차이

Assistant: pg_stat_activity 테이블은 현재 실행 중인 PostgreSQL 세션에 대한 정보를 제공합니다. 여기에는 각 세션의 시작 시간, 실행 중인 쿼리의 시작 시간 및 트랜잭션 시작 시간과 같은 정보가 포함됩니다.

- xact_start: 현재 세션이 시작된 시간으로, 해당 세션이 트랜잭션을 시작한 시간을 나타냅니다. 이는 현재 세션이 트랜잭션 내에서 작동 중인지 여부를 파악하는 데 사용됩니다.

- query_start: 현재 세션에서 현재 실행 중인 쿼리의 시작 시간입니다. 이것은 현재 세션에서 실행 중인 쿼리의 시작 시간을 나타내며, 다음 쿼리가 실행되기 전까지 해당 값이 갱신되지 않습니다. 이것은 현재 세션이 얼마나 오랫동안 쿼리를 실행하고 있는지를 추적하는 데 사용됩니다.

따라서 두 값의 차이는 세션이 트랜잭션을 시작한 후 현재까지 얼마나 오랫동안 실행되고 있는지를 나타냅니다. 만약 이 값이 크다면, 해당 세션이 오랜 시간동안 활동 중이거나 긴 트랜잭션을 가지고 있을 수 있습니다.

User: pg_stat_activity를 count(datname), xact_start는 Time series 로 grafana 패널 만드는 쿼리

Assistant: Grafana 패널에 시계열 데이터를 시각화하려면 해당 시계열 데이터를 쿼리하여 Grafana가 이해할 수 있는 형식으로 가져와야 합니다. PostgreSQL의 pg_stat_activity 테이블에서 데이터베이스 이름(datname)과 트랜잭션 시작 시간(xact_start)을 사용하여 시계열 데이터를 추출하는 쿼리를 작성할 수 있습니다.

SELECT
  datname AS "Database",
  count(datname) AS "Session Count",
  xact_start AS "Transaction Start Time"
FROM
  pg_stat_activity
GROUP BY
  datname,
  xact_start
ORDER BY
  xact_start
        

이 쿼리는 각 데이터베이스 별 세션 수와 각 트랜잭션의 시작 시간을 반환합니다. Grafana에서 이 쿼리를 사용하여 시계열 데이터를 시각화할 수 있습니다. 데이터베이스 별로 세션 수의 변화와 각 트랜잭션의 시작 시간을 시계열 차트에 표시할 수 있습니다.

User: Value column must have numeric datatype, column: Database type: string value: postgres 이런 에러가 발생하네

Assistant: Grafana의 시계열 패널에서 사용하는 쿼리는 시간(timestamp), 메트릭(metric), 값(value)의 세 가지 필드가 필요합니다. datname 필드는 문자열 타입이므로 메트릭으로 사용할 수 없습니다. 대신, 각 데이터베이스의 트랜잭션 수를 시간별로 집계하여 표시해야 합니다.

이를 위해서는 xact_start의 시간 부분을 기준으로 세션 수를 집계해야 합니다. 다음은 이러한 쿼리를 작성하는 방법입니다:

SELECT
  date_trunc('minute', xact_start) AS time,
  datname AS metric,
  count(*) AS value
FROM
  pg_stat_activity
WHERE
  xact_start IS NOT NULL
GROUP BY
  time, datname
ORDER BY
  time
        

이 쿼리는 xact_start를 분 단위로 잘라서(time) 각 데이터베이스(datname) 별로 트랜잭션 수(count(*))를 집계합니다. 이렇게 하면 Grafana에서 시계열 차트로 시각화할 수 있습니다.

User: SELECT datname AS "metric", count(datname) AS "Value", date_trunc('minute', xact_start) AS time FROM pg_stat_activity GROUP BY datname, xact_start ORDER BY xact_start 쿼리는 Invalid type for column time, must be of type timestamp or unix timestamp, got: 에러가 나오네

Assistant: pg_stat_activity 테이블에서 트랜잭션이 시작되지 않은 세션의 xact_start 값은 NULL일 수 있습니다. 이를 방지하기 위해 xact_startNULL이 아닌 경우에만 집계하도록 필터링을 추가해야 합니다. 또한, Grafana에서 요구하는 형식에 맞게 time 열을 적절히 처리해야 합니다.

다음은 xact_startNULL이 아닌 경우에만 데이터를 집계하여 Grafana에서 사용할 수 있는 쿼리입니다:

SELECT
  date_trunc('minute', xact_start) AS time,
  datname AS metric,
  count(*) AS value
FROM
  pg_stat_activity
WHERE
  xact_start IS NOT NULL
GROUP BY
  time, datname
ORDER BY
  time
        

이 쿼리는 다음과 같은 기능을 합니다:

  1. date_trunc('minute', xact_start)를 사용하여 xact_start를 분 단위로 잘라냅니다.
  2. User: Value column must have numeric datatype, column: Database type: string value: postgres 이런 에러가 발생하네
  3. 각 데이터베이스(datname)별로 트랜잭션의 수(count(*))를 집계합니다.
  4. 결과를 시간(time)을 기준으로 정렬합니다.

이렇게 하면 Grafana가 요구하는 시계열 데이터 형식에 맞게 데이터를 준비할 수 있습니다. 이 쿼리를 Grafana에 입력하면 시계열 패널에 각 데이터베이스의 트랜잭션 수를 시간별로 시각화할 수 있습니다.

반응형
반응형

<Curl 사용> - index조회 쿼리 curl -X GET "localhost:9200/_cat/ indices?v - index생성쿼리 

curl -X PUT "localhost:9200/ <인덱스명>?pretty

ex) curl -X PUT "localhost:9200/ staff?pretty

 

 < DevTools 사용>

 - 모든 index 조회 쿼리

  ## 모든 Index조회 
  GET /_cat/indices?v

 

 - 생성 

## staff index 생성
PUT /staff/

 

- 생성 후  index 조회 

## staff 라는 index가 생성됨을 확인
GET /_cat/indices?v

 

- index에 데이터 입력 

## staff 라는 type1=type1,  id=1,를 갖는 data 생성
##   POST  <index>/type/id 값
POST staff/type1/1
{
  "name" : "mike",
  "lastname" : "lee",
  "job" : "operator"
}

 

반응형
반응형

 

 

- 조치  : virtualbox 게스트 확장 팩 설치로 해결 (VBox guest additions install)

- 조치방법 : 

https://chat.openai.com/share/7e8a814d-792f-4a8f-b946-b596d3106760

반응형

'클라우드 > 기타' 카테고리의 다른 글

[Prometheus] 쓸만한 Promql  (0) 2023.02.06
반응형
### ns lookup
kubectl run test-nslookup --image=busybox:1.28 --rm -it --restart=Never -- nslookup <domain>


### curl test 
kubectl run curl --image curlimages/curl -it /bin/sh

 

반응형

'클라우드 > K8S' 카테고리의 다른 글

[k8s-json] json query 맛보기  (0) 2023.02.10
[k8s] Pod의 DNS 주소  (0) 2023.02.08
[k8s]Node Drain - 2 (Pod)  (0) 2023.02.01
[k8s] security context 사용법(with multi-container)  (0) 2023.01.31
[k8s] 신규 인증서 생성, 승인  (0) 2023.01.27
반응형

 

  json 자료 유형

 - [] – array

 - {} – dictionary

 

  json을 활용한 kubectl query 

(출처: kubectl Cheat Sheet | Kubernetes)

#Query1
kubectl get pod -o jsonpath='{$.items[*].metadata.name}{“\n”}’

#result
busybox-1 busybox-2

#Query2
kubectl get pod -o jsonpath='{$.items[*].spec.containers[?(@.image == "busybox:latest")].name}{"\n"}’


#result
busybox-1 busybox-2

 

결과는 같지만, Query1/Query2가 가져오는 key:value  다르다.

배열의 모든 값 “*” (wild card),  조건식 “?()”  (='{$.items[*].spec.containers[?(@.image == "busybox:latest")].)  은 다음에..

반응형

'클라우드 > K8S' 카테고리의 다른 글

[Test용 Pod]  (0) 2023.06.28
[k8s] Pod의 DNS 주소  (0) 2023.02.08
[k8s]Node Drain - 2 (Pod)  (0) 2023.02.01
[k8s] security context 사용법(with multi-container)  (0) 2023.01.31
[k8s] 신규 인증서 생성, 승인  (0) 2023.01.27
반응형

출처 : 서비스 및 파드용 DNS | Kubernetes

 

- 중요

- Pod 의 DNS 주소를 확인 방법

   위의 설명을 보면, Pod는 <pod-ip-address>를 dns 주소로 같는다고 했으므로,

   "1) Pod의 IP주소 확인,  2) Pod IP에  nslookup "  순서로 확인 한다.   

 

□ Pod 의 DNS 주소를 확인 예시

   1) Pod의 IP주소 확인

  - -o wide 옵션으로  Pod의 IP를 확인

 

 

2) Pod IP에  nslookup 

 .  Pod IP는  "." 을 "-"로 대체하여 사용하면 됩니다.

kubectl exec -it busybox -- nslookup 192-168-1-16.default.pod.cluster.local

 

<Pod에  nslookup 성공>

 

  . Pod name을 사용할 경우 ( 실패한다) 

 

반응형

'클라우드 > K8S' 카테고리의 다른 글

[Test용 Pod]  (0) 2023.06.28
[k8s-json] json query 맛보기  (0) 2023.02.10
[k8s]Node Drain - 2 (Pod)  (0) 2023.02.01
[k8s] security context 사용법(with multi-container)  (0) 2023.01.31
[k8s] 신규 인증서 생성, 승인  (0) 2023.01.27
반응형

□ 쓸만한 promql 

 1. k8s 

# 1. k8s 
#   =~: Select labels that regex-match the provided string.  (정규표현식 매칭가능) 
##
container_network_recevie_bytes_total{namespace="kubes-system",pod=~"weave.+"}

"=~" 표현식으로  weave 이하의 모든 pod들을 조회

반응형
반응형

<Node Drain 실패>

controlplane ~ ➜  kubectl drain node01 --ignore-daemonsets
node/node01 cordoned
error: unable to drain node "node01" due to error:cannot delete Pods declare no controller (use --force to override): default/hr-app, continuing command...
There are pending nodes to be drained:
 node01
cannot delete Pods declare no controller (use --force to override): default/test-app

There are pending nodes to be drained:
 node01
cannot delete Pods declare no controller (use --force to override): default/hr-app

- 원인 : Drain을 하기 위해선 1개 이상의 Replicaset이 있어야 함.

             즉 deploy,replicaset 으로 replica를 1개 이상 유지 시킬 object가 필요한것이다. 

- 조치 :  1) Pod를   deploy, replicaset으로 바꿔주던지, 

              2) 아니면   " --force " 옵션으로  pod를 영원히 날려버리던지 

              ex) kubectl drain node01 --ignore-daemonsets --force

                 

 

반응형

+ Recent posts