Diagnostics

What is diagnostics

Elasticsearch Diagnostics

 Elasticsearch Diagnostics (이하 Diagnostic)는 자바 언어로 개발된 ELK 전용 진단 유틸리티 프로그램입니다. Diagnostic은 HTTP REST API 통신을 통해 진단하고픈 ELK의 상태를 JSON 및 TXT 형식의 파일들로 구분해 저장합니다.

 Elasticsearch의 경우 알파버전부터 최신버전까지 모든 버전의 진단이 가능하며, 로그스태시는 5.0이상, 키바나는 6.5버전 이상부터 진단 유틸 사용이 가능합니다. 또한 Linux, OSX, windows 운영체제를 지원하며, Docker 컨테이너 환경에서 standalone utility로도 사용할 수 있습니다.
  

How to start diagnostics

Requirements

Elasticsearch가 설치되어 있는 환경에 JDK의 설치와 환경변수 설정이 필요합니다.
Oracle 혹은 OpenJDK 버전 1.8 - 13을 지원하며 IBM JDK는 지원하지 않습니다. 

Elasticsearch가 설치되어 있는 환경의 사용자는 앞으로 사용될 명령어를 실행하고 로그에 접근할 수 있는 권한이 필요합니다.
환경이 보안되어 있고 권한들이 복잡하게 얽혀있는 경우, superuser 권한을 사용하는 것을 권장합니다.

Install

 먼저 인터넷에 Elastic Diagnostics를 검색하면 처음으로 나오는 Support Diagnostics Utility Github 페이지에 들어갑니다.

 Readme.md 파일 앞부분 Click here for the latest version of the Support Diagnostics Utility 링크를 통해 들어가면 Diagnostic의 최신 버전 실행파일을 다운로드 받을 수 있습니다.
(2022/10/15 현재 최신 버전은 Support Diagnostic v8.4.1 입니다.)

 주의할 점은 다운로드시 Source code가 파일명에 들어있지 않은 .zip 파일을 받아야 합니다. Source code.zip/tar.gz 파일에 있는 코드를 사용할 경우 오류가 발생하므로 diagnostics-version-dist.zip 파일을 다운받으시면 됩니다.

Elasticsearch가 설치된 환경에서 Diagnostic을 실행할 위치에 압축파일을 다운로드하고 압축해제 합니다.

Run as interactive mode

Start Interactive mode

$ sudo ./diagnostics-8.4.1/diagnostics.sh

 명령어로 Diagnostic을 실행합니다. 별도의 파라미터 없이 diagnostics.sh를 실행하게 되면 자동으로 Interactive Mode로 Diagnostic이 실행됩니다.

Interactive Mode로 실행하면 자동으로 질문을 제시합니다. 현재 클러스터의 세팅에 맞춰 입력하면 Diagnostic이 실행됩니다.

선택지 중 대괄호[ ] 에 들어있는 값, 별표* 가 표시되어 있는 항목이 질문의 기본값입니다. 별도의 입력 없이 엔터를 누르게 될 경우 해당 내용이 입력됩니다.

/diagnostics-8.4.1/ 폴더 구조 (참고용)

Interactive Mode에서 제시되는 질문들에 대한 간단한 설명입니다.
우측 화살표를 누르면 전체 사진을 볼 수 있습니다.

Bypass the diagnostic version check
버전 체크의 유무를 결정합니다.
인터넷 연결이 방화벽으로 막혀있을 경우 Y를 선택하세요

Enter the number of the diagnostic type to run
Diagnostic 타입을 결정합니다.
Local에 있는 Elasticsearch 정보를 선택해야 하는 경우
1번을 선택합니다.

Required field. Hostname, IP Address, or localhost
Diagnostic 대상의 주소를 입력합니다.
Local에 있는 Elasticsearch 정보를 선택해야 하는 경우
localhost를 입력합니다.

Listening port
Diagnostic 대상의 포트 번호를 입력합니다.

Use https to access the cluster?
클러스터 연결에 https 통신 사용 유무를 입력합니다.

Bypass hostname verification for certificate?
호스트 이름 확인 과정 무시 여부를 입력합니다.

Cluster secured?
클러스터의 보안기능 사용 여부를 입력합니다.

Type of authentication to use
인증 방법을 선택합니다.
1번은 Username/password 방식
2번은 공개 키 방식입니다.
(예시에서는 1번을 선택했습니다)

Elasticsearch user account
엘라스틱 유저 ID를 입력합니다.
리눅스 환경 사용자가 아닌 엘라스틱 유저임에 주의하세요.

Elasticsearch user password
엘라스틱 유저 비밀번호를 입력합니다.

Http Proxy Server present?
Http 프록시 서버의 유무를 입력합니다.

Fully qualified path to an output directory
Diagnostic 결과가 저장되는 위치를  절대경로로 입력합니다.
입력하지 않을 시 현재 위치에 저장됩니다.
Symbolic link는 지원하지 않습니다.

File type that will be used to compress the output directory
결과 폴더의 압축방식을 결정합니다.
.zip, .tar중 확장자를 선택할 수 있으며 기본값인 any를 입력할 시 .zip 확장자로 압축을 시도하고 실패할 시 .tar 확장자로 압축합니다.

Result

Diagnostic이 끝나면 앞서 설정한 경로로 압축파일이 저장됩니다. 

압축 파일 내부엔 .json, .txt, .log 등의 확장자 파일로 Diagnostic 결과들이 저장되어 있습니다. 

Running From The Command Line

Start From The Command Line

Interactive 모드 외에도 Command Line에서 파라미터를 적용해 Diagnostic 설정을 할 수 있습니다. 

ssl 보안 설정이 되어있는 기본적인 클러스터의 경우 아래의 명령어로 Diagnostic을 실행할 수 있습니다.

$ sudo ./diagnostics.sh --host localhost -u username --password --ssl

위의 명령어대로 실행 시 비밀번호 입력을 요청합니다. Elastic User Password를 입력해주시면 됩니다.

별도의 location 설정을 하지 않은 명령어이므로 결과 zip(tar) 파일은 diagnostic.sh 파일 경로에 존재합니다.

Parameters

Parameter들을 이용해 다양한 Diagnostic 옵션을 적용할 수 있습니다.

Parameter의 상세 정보는 깃허브 페이지에 설명되어 있습니다.

이동훈(Donghoon Lee)