k8s集群日志收集
-
Lo recopilación de registros
K8S sistema de componentes registro
K8S Cluster desplegado dentro del registro de aplicación - Acceder esquema Filebeat + ELK
Filebeat (herramienta de recopilación de registros) + Logstach (datos del motor de procesamiento) + Elasticserch (almacenamiento de datos, búsqueda de texto completo, distribuido motor de búsqueda) + Kibana (visualización de datos, gráficos, búsqueda)
3 logs de contenedores cómo recoger
Pod adicional de recopilación de registros contenedor dedicado: Recoger programa
ventajas: acoplamiento bajas
desventajas: Cada cápsula iniciar un agente de recopilación de registros, el consumo de recursos y el aumento de los costes de mantenimiento de operación y mantenimiento
4 despliegue DaemonSet ensamblaje toman K8S log / var / log / messages
4.1 Instalación ELK en el nodo de puerto
de la instalación, configuración ELK
1)安装OpenJDK
yum -y install java-1.8.0-OpenJDK
2)安装Logstash
https://www.elastic.co/guide/en/logstash/7.6/installing-logstash.html
配置网络源
/ etc / yum. repos.d / logstash.repo
[logstash-7.x]
name = elástico repositorio para 7.x paquetes
baseurl = https://artifacts.elastic.co/packages/7.x/yum
gpgcheck = 1
gpgkey = https: / /artifacts.elastic.co/GPG-KEY-elasticsearch
activar = 1
autorefresh = 1
type = rpm-md
3) Instalación ELK montaje
yum la instalación logstash elasticsearch Kibana -Y
4) de montaje configurado.
Para modificar la configuración Kibana
VI /etc/kibana/kibana.yml
la server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: [ " HTTP: // localhost: 9200 "]
Logstash modificar la configuración
vi /etc/logstash/conf.d/logstash-to-es.conf
de entrada {
latidos {
port => 5044
}
}
filtro {
}
de salida {
Elasticsearch {
hosts => [ " http://127.0.0.1:9200 "]
de índice => "K8S-log -% {+} aaaa.mm.dd" #索引格式
}
stdout {codec => rubydebug}
}
Iniciar servicio
systemctl empezar Kibana # inicio Kibana
systemctl Start elasticsearch # inicia elasticsearch
/ usr / share reportar / logstash / bin / logstash -f /etc/logstash/conf.d/logstash-to-es.conf y
192.168.1.143:5601 acceso # Kibana
5) crear una vaina (realiza nodo maestro) de recopilación de registros componente
kubectl aplicar -f K8S-logs.yaml
apiVersion: v1
tipo: configMap
metadatos:
nombre: K8S-logs-filebeat-config
espacio de nombres: Kube-sistema
datos:
filebeat.yml: | -
filebeat.prospectors:
-
escribir: registro de
caminos:- / messages
campos:
app: K8S
Tipo: Módulo
fields_under_root: true
output.logstash:
anfitriones: [ '192.168.1.143:5044'] - / messages
apiVersion: Aplicaciones / v1
tipo: DaemonSet
metadatos:
nombre: K8S-registros de
espacio de nombres: Kube-sistema
de especificaciones:
selector:
matchLabels:
Proyecto: K8S
aplicación: filebeat
plantilla:
metadatos:
etiquetas:
Proyecto: K8S
de aplicaciones: filebeat
especificaciones:
Contenedores:
- Nombre: filebeat
imagen: docker.elastic.co/beats/filebeat:6.4.2
args: [
"c", "/etc/filebeat.yml",
"-e",
]
recursos:
peticiones:
CPU: 100m
memoria: 100mi
limita:
500: CPU
de memoria: 500MI
SecurityContext:
RunAsUser: 0
volumeMounts:- Nombre: filebeat-config
de ruta de montaje: /etc/filebeat.yml
SUBPATH: filebeat.yml - Nombre: K8S-logs
de ruta de montaje: / Mensajes
volúmenes:
- Nombre: filebeat-config
- Nombre: K8S-logs
rutaServidor:
ruta: / var / log / messages
Tipo: Archivo - Nombre: filebeat-config
configMap:
6) los índices Kibana add
Kibana 界面 -> Índice Patterns- "K8S-log - * -> @ timestamp-> Crear patrón-index> Descubrir
7) Ver registro
Nginx registros recogidos 6
1) crear un espacio de nombres
CAT namespace.yaml
apiVersion: v1
tipo: el espacio de nombres
del Metadatos:
Nombre: la Prueba
2) crear vaina de configMap (archivo de configuración guardado filebeat)
kubectl aplicar -f filebeat-nginx-configmap.yaml
gato filebeat-nginx-configmap.yaml
apiVersion: v1
tipo: configMap
metadatos:
nombre: filebeat-nginx-config
espacio de nombres: test
datos:
filebeat.yml: | -
filebeat.prospectors:
-
escribir: registro de
caminos:- /usr/local/nginx/logs/access.log
campos: # añadir campo adicional que indica si se configura para hacer fuente de campo y el tipo de recopilación de registros
de aplicaciones: la WWW
del tipo: nginx-Acceso
fields_under_root: # true recogerá los registros en la interfaz Kibana superior
- /usr/local/nginx/logs/access.log
-
escribir: registro de
caminos:- /usr/local/nginx/logs/error.log
campos:
aplicación: www
Tipo: nginx-error
fields_under_root: true
output.logstash: # registro de salida de la recopilación de datos logstash a los
anfitriones: [ '192.168.1.143:5044'] - /usr/local/nginx/logs/error.log
3) Crear una contraseña secreta que se utiliza para guardar el puerto del usuario
kubectl crear secreta ventana acoplable-registro harborsecret123 --docker -server = 192.168.1.143 --docker-nombre de usuario = 'Zhanghai' --docker-password = '123 @ Abcde' test -n
4) modificar la configuración logstash
/ usr / share / logstash / bin / y logstash -f /etc/logstash/conf.d/logstash-to-es.conf
CAT-logstash-a es.conf
INPUT {
Beats {
Puerto => 5044
}
}
Filtro {
}
salida {
si [App] == "www" {
si [Tipo] == "nginx de acceso" {
elasticsearch {
hosts => [ " http://127.0.0.1:9200 "]
index => "nginx-acceso- % {+ aaaa.mm.dd} "
}
}
else if [tipo] == "nginx-error"{
elasticsearch {
hosts => [" http://127.0.0.1:9200 "]
index =>" nginx-error -% {+ aaaa.mm.dd} "
}
}
else if [tipo] == "tomcat-catalina"{
elasticsearch {
hosts => [" http://127.0.0.1:9200 "]
index =>" tomcat catalina -% {+} aaaa.mm.dd"
}
}
else if [App] == "" K8S{
Si [Tipo] == "módulo" {
Elasticsearch {
anfitriones => ["http://127.0.0.1:9200 "]
de índice => "K8S-log -% {+ aaaa.mm.dd}"
}
}
}
}
}
5)创建nginx的vaina
kubectl aplicar -f nginx-deployment.yaml
gato nginx-deployment.yaml
apiVersion: Aplicaciones / v1beta1
tipo: Despliegue
de metadatos:
nombre: php-demostración
espacio de nombres: Prueba
de especificaciones:
réplicas: 3
Selector:
matchLabels:
Proyecto: www
aplicación: php-demo
plantilla:
metadatos:
etiquetas:
proyecto: www
aplicaciones php-demo
de especificaciones:
imagePullSecrets:
- Nombre: harborsecret123
contenedores: -
Nombre: Nginx
imagen: 192.168.1.143/project/php-demo:latest
imagePullPolicy: Siempre
puertos:- containerPort: 80
Nombre: web
Protocolo: TCP
recursos:
Requests:
CPU: 0,5
de memoria: 256Mi
límites:
CPU: 1
de memoria: 1GI
recursos:
Requests:
CPU: 0,5
de memoria: 256Mi
límites:
CPU: 1
de memoria: 1GI
livenessProbe:
HTTPGet:
camino : /status.php
puerto: 80
initialDelaySeconds: 6
tiempo_espera_en_segundos: 20
volumeMounts: - Nombre: nginx-registra
de ruta de montaje: / usr / share / nginx / logs locales
- containerPort: 80
-
Nombre: filebeat
imagen: docker.elastic.co/beats/filebeat:6.4.2
args: [
"c", "/etc/filebeat.yml",
"-e",
]
recursos:
límites:
de memoria: 500MI
solicitudes:
100m: cpu
memoria: 100mÎ
SecurityContext:
RunAsUser: 0
volumeMounts:- Nombre: filebeat-config
de ruta de montaje: /etc/filebeat.yml
SUBPATH: filebeat.yml -
Nombre: nginx-registra
de ruta de montaje: / usr / share / nginx / logs localesvolúmenes:
- Nombre: filebeat-config
- Nombre: nginx-registra
emptyDir: {} - Nombre: filebeat-config
configMap:
Nombre: filebeat-nginx-config
5) Configurar Kibana Frente
Kibana Interfaz -> Kibana Índice Patterns- "nginx- acceso - * -> @ timestamp-> Crear patrón-index> Descubrir
- Tomcat registros recopilados
1) crear una vaina de configMap
CAT filebeat-tomcat-configmap.yaml
apiVersion: v1
tipo: configMap
los metadatos:
filebeat-config: Nombre del
espacio de nombres: la Prueba
datos:
filebeat.yml: | -
filebeat.prospectors:
- escribir: registro de
caminos:- /usr/local/tomcat/logs/catalina.*
campos:
Aplicación: la WWW
del tipo: Tomcat-catalina
fields_under_root: true
de varias líneas: # coincidencia de varias líneas, tiene [el principio de la línea de la entrada de registro
patrón: '^ ['
negate: a cierto
partido: después
output.logstash:
los anfitriones: [ '192.168.1.143:5044']
kubectl Aplicar -f filebeat-Tomcat-configmap.yaml
- /usr/local/tomcat/logs/catalina.*
2)创建Tomcat的vaina
kubectl aplicar -f Tomcat-deployment.yaml
gato gato-deployment.yaml
apiVersion: Aplicaciones / v1beta1
tipo: Despliegue
de metadatos:
nombre: Tomcat-java-demostración
espacio de nombres: Prueba
de especificaciones:
réplicas: 3
selectores:
matchLabels:
proyecto: www
aplicación: java-demo
plantilla:
metadatos:
etiquetas:
proyecto: www
aplicaciones java-demo
de especificaciones:
imagePullSecrets:
- Nombre: harborsecret123
contenedores: -
Nombre: Tomcat
imagen: 192.168.1.143/project/tomcat-java-demo:latest
imagePullPolicy: Siempre
puertos:- containerPort: 8080
Nombre: web
Protocolo: TCP
recursos:
Requests:
CPU: 0,5
de memoria: 1GI
límites:
CPU: 1
de memoria: 2GI
livenessProbe:
HTTPGet:
Ruta: /
puerto: 8080
initialDelaySeconds: 60
tiempo_espera_en_segundos: 20
readinessProbe:
HTTPGet:
Ruta: /
puerto: 8080
initialDelaySeconds: 60
tiempo_espera_en_segundos: 20
volumeMounts: - Nombre: Tomcat-registra
de ruta de montaje: / usr / local / Tomcat / logs
- containerPort: 8080
- Nombre: filebeat
imagen: docker.elastic.co/beats/filebeat:6.4.2
args: [
"c", "/etc/filebeat.yml",
"-e",
]
recursos:
límites:
de memoria: 500MI
solicitudes:
100m: cpu
memoria: 100mÎ
SecurityContext:
RunAsUser: 0
volumeMounts:- Nombre: filebeat-config
de ruta de montaje: /etc/filebeat.yml
SUBPATH: filebeat.yml - Nombre: tomcat-registra
de ruta de montaje: / usr / local / tomcat / logs
volúmenes:
- Nombre: filebeat-config
- Nombre: Tomcat-registra
emptyDir: {} - Nombre: filebeat-config
configMap:
Nombre: filebeat-config
3) Recepción de configuración Kibana
Kibana 界面 -> Índice Kibana Patrones-tomcat-catalina - * -> @ timestamp-> Crear patrón-index> Descubrir