私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Filebeat+ELK の構築と解釈のリファレンス
リンク:k8s 学習 – k8s に基づく ELK ログ収集の詳細なプロセス
この章では説明を繰り返しません
仮想マシン
イプ | CPU名 | CPU | メモリ | ハードディスク |
---|---|---|---|---|
192.168.10.11 | マスター01 | 2cpuデュアルコア | 4G | 100グラム |
192.168.10.12 | 労働者01 | 2cpuデュアルコア | 4G | 100グラム |
192.168.10.13 | 労働者02 | 2cpuデュアルコア | 4G | 100グラム |
192.168.10.17 | エルク | 1cpuデュアルコア | 4G | 100グラム |
バージョン centos7.9
k8s-1.27をデプロイしました
ELK サーバーは Filebeat+ELK をデプロイしました
アプリケーション Pod 内で filebeat (sidecar) を実行することで実装されます。今回は Tomcat を例として説明します。
デフォルトでは、Tomcat コンテナーに Web サイトのホームページ ファイルがありません。これを追加しないと、ポッド内のコンテナーが正常に実行できなくなります。
work01ホスト操作
mkdir /opt/tomcatwebroot
echo "tomcat is running" > /opt/tomcatwebroot/index.html
マスターホストの操作
vim tomcat-logs.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-demo
namespace: default
spec:
replicas: 2
selector:
matchLabels:
project: www
app: tomcat-demo
template:
metadata:
labels:
project: www
app: tomcat-demo
spec:
nodeName: worker01
containers:
- name: tomcat
image: tomcat:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: web
protocol: TCP
resources:
requests:
cpu: 0.5
memory: 500Mi
limits:
cpu: 1
memory: 1Gi
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
volumeMounts:
- name: tomcat-logs
mountPath: /usr/local/tomcat/logs
- name: tomcatwebroot
mountPath: /usr/local/tomcat/webapps/ROOT
- name: filebeat
image: docker.io/elastic/filebeat:7.17.2
imagePullPolicy: IfNotPresent
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
resources:
limits:
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
securityContext:
runAsUser: 0
volumeMounts:
- name: filebeat-config
mountPath: /etc/filebeat.yml
subPath: filebeat.yml
- name: tomcat-logs
mountPath: /usr/local/tomcat/logs
volumes:
- name: tomcat-logs
emptyDir: {}
- name: tomcatwebroot
hostPath:
path: /opt/tomcatwebroot
type: Directory
- name: filebeat-config
configMap:
name: filebeat-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
namespace: default
data:
filebeat.yml: |-
filebeat.inputs:
- type: log
paths:
- /usr/local/tomcat/logs/catalina.*
fields:
app: www
type: tomcat-catalina
fields_under_root: true
multiline:
pattern: '^['
negate: true
match: after
setup.ilm.enabled: false
setup.template.name: "tomcat-catalina"
setup.template.pattern: "tomcat-catalina-*"
output.logstash:
hosts: ['192.168.10.17:5056']
この yaml は、Tomcat と Filebeat のデプロイメント ファイル、および Filebeat 構成ファイルを定義します。
導入セクション
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-demo
namespace: default
spec:
replicas: 2
selector:
matchLabels:
project: www
app: tomcat-demo
template:
metadata:
labels:
project: www
app: tomcat-demo
spec:
nodeName: worker01
containers:
- name: tomcat
image: tomcat:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: web
protocol: TCP
resources:
requests:
cpu: 0.5
memory: 500Mi
limits:
cpu: 1
memory: 1Gi
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
volumeMounts:
- name: tomcat-logs
mountPath: /usr/local/tomcat/logs
- name: tomcatwebroot
mountPath: /usr/local/tomcat/webapps/ROOT
- name: filebeat
image: docker.io/elastic/filebeat:7.17.2
imagePullPolicy: IfNotPresent
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
resources:
limits:
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
securityContext:
runAsUser: 0
volumeMounts:
- name: filebeat-config
mountPath: /etc/filebeat.yml
subPath: filebeat.yml
- name: tomcat-logs
mountPath: /usr/local/tomcat/logs
volumes:
- name: tomcat-logs
emptyDir: {}
- name: tomcatwebroot
hostPath:
path: /opt/tomcatwebroot
type: Directory
- name: filebeat-config
configMap:
name: filebeat-config
メタデータ: デプロイメントの名前と名前空間を定義します。
spec: デプロイメントの詳細な仕様が含まれます。
レプリカ: レプリカの数を指定します。つまり、2 つの Tomcat インスタンスを実行します。
selector: Pod ラベルを照合するためのセレクターを定義します。
template: メタデータと仕様を含む Pod テンプレートについて説明します。
nodeName: ポッドが実行されているノード名 (worker01) を指定します。
コンテナ: Tomcat と Filebeat の 2 つのコンテナが定義されています。
Tomcat コンテナ:
image: tomcat:latest イメージを使用します。
ポート: ポート 8080 を公開します。
リソース: リソースのリクエストと制限を定義します。
livenessProbe および readinessProbe: ヘルスチェックに使用されます。
volumeMounts: 2 つのボリュームがマウントされます。
Filebeat コンテナ:
画像: filebeat:7.17.2 イメージを使用します。
args: 起動パラメータを指定します。
リソース: リソースのリクエストと制限を定義します。
securityContext: root ユーザーとして実行します。
volumeMounts: 2 つのボリュームがマウントされます。
ボリューム:
tomcat-logs: emptyDir ボリュームを使用します。
tomcatwebroot: hostPath ボリュームを使用します。
filebeat-config: ConfigMap ボリュームを使用します。
設定ファイル (ConfigMap) セクション
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
説明する
メタデータ: ConfigMap の名前を定義します。
data: Filebeat の設定内容が含まれている必要があります (ここでは省略)。
Elk ホスト構成
以前の構成ファイルに影響を与えずに logstash 構成ファイルを書き込みます
vim /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf
input {
beats {
host => "0.0.0.0"
port => "5056"
}
}
filter {
}
output {
elasticsearch {
hosts => "192.168.10.17:9200"
index => "tomcat-catalina-%{+yyyy.MM.dd}"
}
}
走る
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf --path.data /usr/share/logstash/data3 &
ポートが稼働していることを確認します
ss -anput | grep ":5056"
マスターホストの操作
kubectl apply -f tomcat-logs.yaml
画像をダウンロードする必要があるのでしばらくお待ちください
次にポッドを確認します
注: VPN が必要です
kubectl get deployment.apps
kubectl get pods
Tomcat で生成されたログを表示する (-c: コンテナー)
filebeat 収集ログの表示
kubectl logs tomcat-demo-664584f857-k8whd -c filebeat
ホストブラウザアクセス
192.168.10.17:5601
ログを見たことがあることがわかります
仕上げる
お役に立てましたら、クリックしてフォローしてください