36.5.4. Kibana
OpenShift Container Platform 웹 콘솔에서 Kibana 콘솔에 액세스하려면 master webconsole-config configmap 파일에 loggingPublicURL
매개변수를 추가합니다(kiban a-hostname
매개변수). 값은 HTTPS URL이어야 합니다.
... clusterInfo: ... loggingPublicURL: "https://kibana.example.com" ...
loggingPublicURL
매개변수를 설정하면 찾아보기
유효한 로그인 쿠키가 만료되면 Kibana 콘솔에 로그인해야 합니다(예: 로그인해야 합니다.
- 첫 번째 사용
- 로그아웃 후
중복성을 위해 Kibana 배포를 일반적인 대로 확장할 수 있습니다.
$ oc scale dc/logging-kibana --replicas=2
로깅 플레이북의 여러 실행에서 확장이 지속되도록 하려면 인벤토리 파일의 openshift_logging_kibana_replica_count
를 업데이트해야 합니다.
openshift_logging_kibana_hostname
변수로 지정된 사이트를 방문하여 사용자 인터페이스를 확인할 수 있습니다.
Kibana에 대한 자세한 내용은 Kibana 설명서 를 참조하십시오.
Kibana 시각화
Kibana Visualize를 사용하면 컨테이너 및 Pod 로그를 모니터링하기 위한 시각화 및 대시보드를 생성할 수 있으므로 관리자 사용자(Cluster-admin
또는 cluster-reader
)는 배포, 네임스페이스, Pod 및 컨테이너별로 로그를 볼 수 있습니다.
Kibana 시각화는 Elasticsearch 및 ES-OPS Pod 내부에 있으며 해당 Pod 내에서 실행해야 합니다. 대시보드 및 기타 Kibana UI 오브젝트를 로드하려면 먼저 대시보드를 추가하려는 사용자로 Kibana에 로그인한 다음 로그아웃해야 합니다. 그러면 다음 단계에서 사용하는 필수 사용자별 구성이 생성됩니다. 그런 다음 다음을 실행합니다.
$ oc exec <$espod> -- es_load_kibana_ui_objects <user-name>
여기서 $espod
는 Elasticsearch Pod 중 하나입니다.
Kibana 시각화에 사용자 지정 필드 추가
OpenShift Container Platform 클러스터가 Elasticsearch .operations.* 또는
에 정의되지 않은 사용자 정의 필드가 포함된 JSON 형식으로 로그를 생성하는 경우 Kibana에서 사용자 정의 필드를 사용할 수 없기 때문에 이러한 필드를 사용하여 시각화를 생성할 수 없습니다.
project.*
그러나 Elasticsearch 인덱스에 사용자 정의 필드를 추가하면 Kibana 시각화에서 사용할 Kibana 인덱스 패턴에 필드를 추가할 수 있습니다.
사용자 정의 필드는 템플릿이 업데이트된 후 생성된 인덱스에만 적용됩니다.
Kibana 시각화에 사용자 정의 필드를 추가하려면 다음을 수행합니다.
Elasticsearch 인덱스 템플릿에 사용자 정의 필드를 추가합니다.
-
필드를 추가할 Elasticsearch 인덱스(
.operations.* 또는
인덱스)를 결정합니다. 사용자 지정 필드가 있는 특정 프로젝트가 있는 경우 프로젝트의 특정 인덱스에 필드를 추가합니다(예:project.*
project.this-project-has-time-fields.*)
. 다음과 유사한 사용자 지정 필드에 대한 JSON 파일을 생성합니다.
예를 들면 다음과 같습니다.
{ "order": 20, "mappings": { "_default_": { "properties": { "mytimefield1": { 1 "doc_values": true, "format": "yyyy-MM-dd HH:mm:ss,SSSZ||yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ||yyyy-MM-dd'T'HH:mm:ssZ||dateOptionalTime", "index": "not_analyzed", "type": "date" }, "mytimefield2": { "doc_values": true, "format": "yyyy-MM-dd HH:mm:ss,SSSZ||yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ||yyyy-MM-dd'T'HH:mm:ssZ||dateOptionalTime", "index": "not_analyzed", "type": "date" } } } }, "template": "project.<project-name>.*" 2 }
openshift-loggin
프로젝트로 변경합니다.$ oc project openshift-logging
Elasticsearch Pod 중 하나의 이름을 가져옵니다.
$ oc get -n logging pods -l component=es NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE logging-es-data-master-5av030lk-1-2x494 2/2 Running 0 38m 154.128.0.80 ip-153-12-8-6.wef.internal <none>
JSON 파일을 Elasticsearch 포드로 로드합니다.
$ cat <json-file-name> | \ 1 oc exec -n logging -i -c elasticsearch <es-pod-name> -- \ 2 curl -s -k --cert /etc/elasticsearch/secret/admin-cert \ --key /etc/elasticsearch/secret/admin-key \ https://localhost:9200/_template/<json-file-name> -XPUT -d@- | \ 3 python -mjson.tool
{ "acknowledged": true }
별도의 OPS 클러스터가 있는 경우 es-ops Elasticsearch Pod 중 하나의 이름을 가져옵니다.
$ oc get -n logging pods -l component=es-ops NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE logging-es-ops-data-master-o7nhcbo4-5-b7stm 2/2 Running 0 38m 154.128.0.80 ip-153-12-8-6.wef.internal <none>
JSON 파일을 es-ops Elasticsearch Pod로 로드합니다.
$ cat <json-file-name> | \ 1 oc exec -n logging -i -c elasticsearch <esops-pod-name> -- \ 2 curl -s -k --cert /etc/elasticsearch/secret/admin-cert \ --key /etc/elasticsearch/secret/admin-key \ https://localhost:9200/_template/<json-file-name> -XPUT -d@- | \ 3 python -mjson.tool
출력은 다음과 유사합니다.
{ "acknowledged": true }
인덱스가 업데이트되었는지 확인합니다.
oc exec -n logging -i -c elasticsearch <es-pod-name> -- \ 1 curl -s -k --cert /etc/elasticsearch/secret/admin-cert \ --key /etc/elasticsearch/secret/admin-key \ https://localhost:9200/project.*/_search?sort=<custom-field>:desc | \ 2 python -mjson.tool
명령은 정렬된 사용자 지정 필드의 인덱스 레코드를 내림차순으로 출력합니다.
참고설정이 기존 인덱스에는 적용되지 않습니다. 설정을 기존 인덱스에 적용하려면 re-index를 수행합니다.
-
필드를 추가할 Elasticsearch 인덱스(
Kibana에 사용자 정의 필드를 추가합니다.
Elasticsearch 컨테이너에서 기존 인덱스 패턴 파일을 가져옵니다.
$ mkdir index_patterns $ cd index_patterns $ oc project openshift-logging $ for espod in $( oc get pods -l component=es -o jsonpath='{.items[*].metadata.name}' ) ; do > for ff in $( oc exec -c elasticsearch <es-pod-name> -- ls /usr/share/elasticsearch/index_patterns ) ; do > oc exec -c elasticsearch <es-pod-name> -- cat /usr/share/elasticsearch/index_patterns/$ff > $ff > done > break > done
인덱스 패턴 파일은 /usr/share/elasticsearch/index_patterns 디렉터리에 다운로드됩니다.
예를 들면 다음과 같습니다.
index_patterns $ ls com.redhat.viaq-openshift.index-pattern.json
해당 인덱스 패턴 파일을 편집하여 각 사용자 정의 필드의 정의를
필드
값에 추가합니다.예를 들면 다음과 같습니다.
{\"count\": 0, \"name\": \"mytimefield2\", \"searchable\": true, \"aggregatable\": true, \"readFromDocValues\": true, \"type\": \"date\", \"scripted\": false},
정의에는 시각화에 사용하려면
\"searchable\": true 및
\"aggregatable\": true,
매개변수가 포함되어야 합니다. 데이터 유형은 위에서 추가한 Elasticsearch 필드 정의에 일치해야 합니다. 예를 들어숫자
유형인 Elasticsearch에myfield
필드를 추가한 경우myfield
를 Kibana에문자열
유형으로 추가할 수 없습니다.인덱스 패턴 파일에서 Kibana 인덱스 패턴의 이름을 인덱스 패턴 파일에 추가합니다.
예를 들어, 작업을 사용하려면\ * 인덱스 패턴은 다음과 같습니다.
"title": "*operations.*"
project.MYNAMESPACE.\* 인덱스 패턴을 사용하려면 다음을 수행합니다.
"title": "project.MYNAMESPACE.*"
사용자 이름을 식별하고 사용자 이름의 해시 값을 가져옵니다. 인덱스 패턴은 사용자 이름의 해시를 사용하여 저장됩니다. 다음 두 명령을 순서대로 실행합니다.
$ get_hash() { > printf "%s" "$1" | sha1sum | awk '{print $1}' > }
$ get_hash admin d0aeb5660fc2140aec35850c4da997
인덱스 패턴 파일을 Elasticsearch에 적용합니다.
cat com.redhat.viaq-openshift.index-pattern.json | \ 1 oc exec -i -c elasticsearch <espod-name> -- es_util \ --query=".kibana.<user-hash>/index-pattern/<index>" -XPUT --data-binary @- | \ 2 python -mjson.tool
예를 들면 다음과 같습니다.
cat index-pattern.json | \ oc exec -i -c elasticsearch mypod-23-gb9pl -- es_util \ --query=".kibana.d0aeb5660fc2140aec35850c4da997/index-pattern/project.MYNAMESPACE.*" -XPUT --data-binary @- | \ python -mjson.tool
출력은 다음과 유사합니다.
{ "_id": ".operations.*", "_index": ".kibana.d0aeb5660fc2140aec35850c4da997", "_shards": { "failed": 0, "successful": 2, "total": 2 }, "_type": "index-pattern", "_version": 1, "created": true, "result": "created" }
-
사용 가능한 필드 목록과 관리
인덱스 패턴 페이지의 필드 목록에 사용자 정의 필드 가 표시되도록 Kibana 콘솔을 종료하고 다시 시작합니다.