ELK Stack을 만져 보자! ((02) Kibana 설치)

ELK Stack을 만져 보자! ((02) Kibana 설치)

2022-10-03 last update

18 minutes reading

지난 번 계속


지난번는 ElasticSearch를 설치했으므로 kibana를 설치합니다.

kibana 설치


리포지토리 등록


이 기사에서는 ElasticSearch와 Kibana를 별도의 OS에 설치하므로 저장소 등록이 필요하지만 동일한 OS에 설치하는 경우에는 필요하지 않습니다.
나는 통신 패킷을 확인하고 싶기 때문에 별도의 OS에 설치하고 있습니다.

CentOS(Kibana)
sudo vi /etc/yum.repos.d/elasticsearch.repo

elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

패키지 설치


전회 기재를 잊었습니다만, ELK Stack의 경우, 버젼을 지정하지 않으면 최신 버젼이 인스톨 되어 버립니다.
갱신 빈도는 매우 빠른 것에 더해, 마이너 버전 업에서도 상당히 설정이나 GUI가 바뀌므로, 검증을 실시한 버전으로 짜는 것이 좋네요!

CentOS(Kibana)
sudo yum update -y
sudo yum install -y java-11-openjdk-devel
yum install kibana-7.14.1 -y

설정 파일 편집


기본값은 영어이므로 일본어화한 설정 파일을 게재합니다.
포인트는
31행에서 "elasticsearch.hosts: ["http://192.168.151.131:9200 "]"와 ElasticSearch URL을 설정
121행에 "i18n.locale: "ko-KR""를 입력하여 일본어화
의 2점이군요.

CentOS (/etc/elasticsearch/elasticsearch.yml)
# Kibanaは、バックエンドサーバーによって提供されます。
# この設定では、使用するポートを指定します。
server.port: 5601

# Kibanaサーバーがバインドするアドレスを指定します。
# IPアドレスとホスト名はどちらも有効な値です。
# デフォルトは'localhost'ですが, これは通常リモートマシンが接続できないことを意味します。
# リモートユーザからの接続を許可するには, このパラメータにループバックでないアドレスを設定してください。
server.host: "0.0.0.0"

# プロキシ経由で運用している場合に、Kibanaをマウントするパスを指定できるようにします。
# Kibanaが受信したリクエストからbasePathを削除するかどうか、起動時の非推奨警告を防ぐには、
# `server.rewriteBasePath`設定を使用します。
# この設定は、スラッシュで終わることはできません。
#server.basePath: ""

# Kibana が `server.basePath` をプレフィックスとするリクエストを書き換えるか、リバースプロキシによる 
# 書き換えを要求するかを指定します。
# この設定は Kibana 6.3 以前は常に `false` でしたが、Kibana 7.0 からは 
# デフォルトで `true` になります。
#server.rewriteBasePath: false

# 受信するサーバーリクエストの最大ペイロードサイズをバイト単位で指定します。
#server.maxPayloadBytes: 1048576

# Kibanaサーバーの名前です。 
# これは表示のために使用されます。
server.name: "localhost"

# すべてのクエリに使用するElasticsearchインスタンスのURLです。
elasticsearch.hosts: ["http://192.168.151.131:9200"]

# この設定の値が true の場合、Kibana は server.host 設定で指定されたホスト名を使用します。
# この設定の値が false の場合、Kibana はこの Kibana インスタンスに接続しているホストの
# ホスト名を使用します。
#elasticsearch.preserveHost: true

# Kibana は Elasticsearch のインデックスを使用して、保存された検索、
# ビジュアライゼーション、ダッシュボードを保存します。
# Kibana は、インデックスがまだ存在していない場合、新しいインデックスを作成します。
kibana.index: ".kibana"

# ロードするデフォルトのアプリケーションです。
#kibana.defaultAppId: "home"

# Elasticsearch が基本認証で保護されている場合、これらの設定は、Kibana サーバーが起動時に 
# Kibana インデックスのメンテナンスを実行するために使用するユーザー名とパスワードを提供します。
# Kibanaユーザーは、Kibanaサーバーを介してプロキシされるElasticsearchで認証する必要があります。
#elasticsearch.username: "kibana"
#elasticsearch.password: "pass"

# SSLを有効にし、PEM形式のSSL証明書とSSL鍵ファイルへのパスをそれぞれ設定します。
# これらの設定により、Kibanaサーバからブラウザへの送信リクエストに対してSSLが有効になります。
#server.ssl.enabled: false
#server.ssl.certificate: /path/to/your/server.crt
#server.ssl.key: /path/to/your/server.key

# PEM形式のSSL証明書と鍵ファイルのパスを指定するオプション設定です。
# これらのファイルは、Elasticsearchに対するKibanaのアイデンティティを確認するために使用され、
# Elasticsearchのxpack.security.http.ssl.client_authenticationがrequiredに設定されている場合に必要となります。
#elasticsearch.ssl.certificate: /path/to/your/client.crt
#elasticsearch.ssl.key: /path/to/your/client.key

# Elasticsearchインスタンスの認証局のPEMファイルへのパスを指定できるオプション設定です。
#elasticsearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ]

# SSL証明書の有効性を無視するには、この設定値を「none」に変更してください。
#elasticsearch.ssl.verificationMode: full

# ElasticsearchがPingに応答するのを待つ時間をミリ秒単位で指定します。
# デフォルトは elasticsearch.requestTimeout 設定の値です。
#elasticsearch.pingTimeout: 1500

# バックエンドまたはElasticsearchからの応答を待つ時間をミリ秒単位で指定します。
# この値は正の整数でなければなりません。
#elasticsearch.requestTimeout: 30000

# Elasticsearchに送信するKibanaクライアント側ヘッダーのリスト。
# クライアント側のヘッダーを送信しない場合は、この値を[](空のリスト)に設定します。
#elasticsearch.requestHeadersWhitelist: [ authorization ]

# Elasticsearch に送信されるヘッダー名と値です。
# カスタムヘッダは、elasticsearch.requestHeadersWhitelistの設定に関わらず、
# クライアント側のヘッダで上書きすることはできません。
#elasticsearch.customHeaders: {}

# Elasticsearchがシャードからの応答を待つ時間をミリ秒で指定します。
# 0に設定すると無効になります。
#elasticsearch.shardTimeout: 30000

# Kibana起動時にElasticsearchが再試行するまでの待ち時間(ミリ秒)。
#elasticsearch.startupTimeout: 5000

# Elasticsearchに送信されたクエリをログに記録します。
# logging.verboseをtrueに設定する必要があります。
#elasticsearch.logQueries: false

# KibanaがプロセスIDファイルを作成するパスを指定します。
#pid.file: /var/run/kibana.pid

# Kibanaがログ出力を保存するファイルを指定することができます。
#logging.dest: stdout

# この設定の値をtrueにすると、すべてのログ出力が抑制されます。
#logging.silent: false

# この設定値をtrueにすると、エラーメッセージ以外のすべてのログ出力が抑制されます。
#logging.quiet: false

# この設定値をtrueに設定すると、システム使用情報やすべてのリクエストを含む
# すべてのイベントが記録されます。
#logging.verbose: false

# システムやプロセスのパフォーマンスメトリクスをサンプリングする間隔をミリ秒単位で設定します。
# 最小値は100msです。
# デフォルトは5000です。
#ops.interval: 5000

# ローカライズ可能な全ての文字列、日付、数値フォーマットに使用されるロケールを指定します。
# サポートされている言語は以下の通りです: 英語 - en , デフォルト , 中国語 - zh-CN .
i18n.locale: "ja-JP"

프로세스 시작



CentOS(Kibana)
systemctl start kibana
systemctl status kibana

시작 로그 확인


오류가 발생하지 않았는지 확인합니다.
"Kibana is now available (was unavailable)"라는 메시지를 확인할 수 있으면 OK입니다!

CentOS (/var/log/kibana/kibana.log)
{"type":"log","@timestamp":"2021-11-13T03:29:19-05:00","tags":["info","http","server","Kibana"],"pid":3049,"message":"http server running at http://0.0.0.0:5601"}
{"type":"log","@timestamp":"2021-11-13T03:29:19-05:00","tags":["info","plugins","monitoring","monitoring","kibana-monitoring"],"pid":3049,"message":"Starting monitoring stats collection"}
{"type":"log","@timestamp":"2021-11-13T03:29:19-05:00","tags":["info","plugins","securitySolution"],"pid":3049,"message":"Dependent plugin setup complete - Starting ManifestTask"}
{"type":"log","@timestamp":"2021-11-13T03:29:20-05:00","tags":["info","status"],"pid":3049,"message":"Kibana is now unavailable"}
{"type":"log","@timestamp":"2021-11-13T03:29:20-05:00","tags":["info","plugins","reporting"],"pid":3049,"message":"Browser executable: /usr/share/kibana/x-pack/plugins/reporting/chromium/headless_shell-linux_x64/headless_shell"}
{"type":"log","@timestamp":"2021-11-13T03:29:20-05:00","tags":["warning","plugins","reporting"],"pid":3049,"message":"Enabling the Chromium sandbox provides an additional layer of protection."}
{"type":"log","@timestamp":"2021-11-13T03:29:23-05:00","tags":["info","status"],"pid":3049,"message":"Kibana is now available (was unavailable)"}

연결 확인


클라이언트 OS에서 웹 브라우저를 시작하고 "http://192.168.151.132:5601"에 액세스하면 아래와 같이 표시됩니다.
(오른쪽 하단의 경고는 무시해도 됩니다)

kibana의 사용법은, 메트릭을 수집한 후에, 해설해 가네요.

보충(사람에 따라서는 중요?)


처음으로 키바나를 만졌을 때 웹 GUI가 표시되지 않았습니다.
/var/log/kibana/kibana.log를 확인하면 원인이 kibana에있는 것을 알 수 있습니다.
① Firewall 설정이 허용되지 않음
② 웹 브라우저의 광고 표시를 차단하는 설정으로 하고 있다
그 이유는 조금 빠져 들었습니다.
①은 어쨌든, ②에 도착하는 것은 상당히 고생한 기억이 있으므로, 참고까지,,,
제대로 작동하는지 확인할 수있었습니다!
다음 번에는 kibana를 설치할 것입니다.

패킷 조사(흥미가 있는 사람만♪)


네트워크 및 보안 좋아하는 사람으로서 kibana를 설치 한 후 흐르는 패킷을보고 싶습니다.

ElasticSearch - Kibana 간의 패킷 샘플


Kibana_ElasticSearch_Packet_HTTP.pcap의 부분 캡처

Kibana - 클라이언트 간 패킷 샘플


client_Kibana_Packet_HTTP.pcap의 부분 캡처

캡처 파일은 git으로 공유합니다.


위 캡처 화면의 원시 로그는 아래 git에 공개했습니다.
htps : // 기주 b. 코 m / 와카 p 링 gs / 우와 샤 rk_ 젠 02. 기 t
HTTP 통신이라면 통신 내용이 둥글게 보인다는 것을 확인하실 수 있다고 생각하므로 Wireshark 등에서 참조하십시오.
이 정도라면 큰 일은 없지만, filebeat에서 감사 로그를 평문으로 흘린 날에는 「사고 안건」이군요!
HTTPS로 하거나 IPsec 등으로 통신을 암호화하면 어느 정도는 안전하다는 것을 알 수 있다고 생각합니다.
(기계 학습의 진화나 스펙의 진화가 심한 이 시세, 암호화했기 때문에 안전하다고 결코 말할 수 없습니다만)