descargar: Desbloquee profundamente los componentes principales de SpringCloud para resolver muchos problemas en microservicios
Este curso es un curso de microservicio basado en la integración de SpringCloud del proyecto de backend del centro comercial "Maoyan", desde cero hasta explicaciones detalladas que incluyen Gateway, Hystrix, Ribbon, Feign y otros componentes principales y sus características avanzadas. Al mismo tiempo, también presentará problemas de microservicios encontrados en el trabajo, como seguridad de microservicios, pruebas automatizadas e implementación de Docker, y explicará las causas y soluciones para ayudar fundamentalmente a todos a resolver los problemas del trabajo y las entrevistas.
Adecuado para la multitud
Estudiantes que quieren entender
microservicios;
estudiantes que están interesados en muchas características avanzadas de SpringCloud; estudiantes que encuentran problemas extraños en el trabajo y entrevistas y no pueden comenzar.
Requisitos de reserva técnica.
Familiarizados con las aplicaciones básicas de Spring y SpringMVC frameworks.
Familiarizado con los comandos comunes de MySQL.
Comprender los comandos básicos de Linux.
Ansible implementa prometheus + node-exporter
implementación simple del sistema de monitoreo prometheus
yum dispositivo ansible
yum instalar
archivo de hosts ansible ansible
[alertmanagers]
10.9.119.1
[prometheus]
10.9.119.1
[exportador de nodos]
10.9.119.1
10.9.119.2
10.9.119.3 El
formato de jerarquía de archivos es el siguiente:
prometheus
prometheus.yml
- hosts: prometheus
remote_user:
tareas raíz :- nombre: crear
archivo de directorio :
ruta: / opt / prometheus
estado: directorio # Crear si no hay directorio - nombre: copiar archivo
unarchive:
old-src: prometheus-2.24.0.linux-amd64.tar.gz
dest: / opt / prometheus - nombre: crear
archivo de enlace :
old-src: /opt/prometheus/prometheus-2.24.0.linux-amd64
dest: / opt / prometheus / prometheus
estado: enlace # 软 链接 - nombre:
plantilla de archivo de servicio de copia :
old-src: prometheus.service.j2
dest: /usr/lib/systemd/system/prometheus.service - name: copy config yaml
template:
old-src: prometheus.yml.j2
dest: /opt/prometheus/prometheus/prometheus.yml
notificar:- reiniciar prometheus
- nombre: crear
archivo de directorio de reglas :
ruta: / opt / prometheus / prometheus /
estado de reglas : directorio - name: copy rules yaml # Hay símbolos especiales en el nodo, así que usa copy
copy:
old-src: node.yml
dest: /opt/prometheus/prometheus/rules/node.yml
notifica: # Esta acción activará manejadores- reiniciar prometheus
- nombre: iniciar
servicio de prometheus :
nombre:
estado de prometheus : iniciado
habilitado: sí
controladores: - nombre: reiniciar prometheus
servicio:
nombre: prometheus
estado: reiniciado
prometheus.service.j2 Se puede usar el módulo de copia, y la plantilla se usa aquí
- nombre: crear
[Unidad]
Descripción =
Documentación de Prometheus =
Después = network.target
[Servicio]
WorkingDirectory = / opt / prometheus / prometheus
ExecStart = / opt / prometheus / prometheus / prometheus
ExecReload = / bin / kill -HUP $ MAINPID
ExecStop = / bin / kill -KILL $ MAINPID
Tipo = simple
KillMode = grupo de control
Reiniciar = en caso de falla
RestartSec = 3s
[Instalar]
WantedBy = multi-user.target
prometheus.yml.j2
Configuración global
global:
scrape_interval: 30s #Tiempo de distancia de agarre Evaluation_interval: 30s #Tiempo de distancia de
ejecución del motor de
reglas query_log_file: ./promql.log
Configuración de alarma
alerting : alertmanagers: # Alertmanagers 配置
- static_configs: # Configuración estática de Alertmanager
- objetivos: # alertmanager enviar configuración de destino
{% para alertmanager en grupos ['alertmanagers']%}- {
{alertmanager}}: 9093
{% endfor%}
rule_files: # configuración del archivo de reglas
- {
{alertmanager}}: 9093
- objetivos: # alertmanager enviar configuración de destino
- "
Reglas /*.yml" scrape_configs: # configuración de agarre - job_name: 'prometheus' #Clasificación del propósito de la colección de tareas
static_configs: # Configuración estática del propósito de la captura- objetivos:
{% para prometheu en grupos ['prometheus']%}- "{
{prometheu}}: 9090" # Propósito de agarre
{% endfor%}
- "{
{prometheu}}: 9090" # Propósito de agarre
- objetivos:
- job_name: "nodo"
static_configs:- objetivos:
{% para nodo en grupos ['exportador de nodo']%}- "{
{Node}}: 9100"
{% endfor%}
reglas de nodo
- "{
{Node}}: 9100"
- objetivos:
grupos:
-
name: node.rules #
Reglas de título del grupo de reglas de alarma :- alert: node is Down
expr: up == 0
for: 30s #Duration, lo que significa que si no se obtiene información durante 30 segundos, se activará una alarma.
etiquetas:
gravedad: grave # Etiqueta personalizada
anotaciones graves :
resumen: “Instancia { {$ labels.instance}} down "#
Descripción resumida personalizada :" { {$ labels.instance}} del trabajo { {$ labels.job}} ha estado inactivo durante más de 5 minutos. "# Descripción detallada personalizada - alert: node Sistema de archivos
expr: 100 - (node_filesystem_free_bytes {fstype = ~ "ext4 | xfs"} / node_filesystem_size_bytes {fstype = ~ "ext4 | xfs"} * 100)> 80
para: 2m
etiquetas:
gravedad:
anotaciones de advertencia :
resumen: " { { Error de análisis de KaTeX: se esperaba 'EOF', obtuvo '}' en la posición 16: etiquetas.instancia} ̲}: { { etiquetas.punto de montaje}} 分区 运用 过高 ” descripción:“ { { Error de análisis de KaTeX: se esperaba 'EOF ', obtuvo'} 'en la posición 16: etiquetas.instancia} ̲}: { { etiquetas.punto de montaje}} 分区 运用 大于 80% (当前 值: { {$ valor}}) ”
- alert: node Memory
expr: 100- (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100> 80
para: 2 millones de
etiquetas:
severidad:
anotaciones de advertencia :
resumen: “{ { KaTeX parseOF 'error de error: esperado', obtuvo la posición 16: etiquetas.instancia} ̲}: uso de memoria demasiado alto "de ... etiquetas.instancia}}: uso de memoria mayor al 80% (valor actual: { {$ valor}})" - alerta: CPU del nodo
expr: 100 - (avg (irate (node_cpu_seconds_total {mode = "idle"} [5m])) por (instancia) * 100)> 80
para: 2m
etiquetas:
gravedad:
anotaciones de advertencia :
resumen: "{ { Error de análisis de KaTeX: se esperaba 'EOF', obtuvo '}' en la posición 16: etiquetas.instancia} ̲}: CPU 运用 过高 "d… etiquetas.instancia}}: CPU 运用 大于 80% (当前 值: { {$ valor }}) ” Exportador de nodos exportador de nodos.yml
- alert: node is Down
-
hosts: nodo-exporter
usuario_remoto:
tareas raíz :- nombre: crear
archivo de directorio :
ruta: / opt / prometheus
estado: directorio - nombre: copiar archivo
unarchive:
old-src: node_exporter-1.0.1.linux-amd64.tar.gz
dest: / opt / prometheus - nombre: crear
archivo de enlace :
old-src: /opt/prometheus/node_exporter-1.0.1.linux-amd64
dest: / opt / prometheus / node_exporter
estado: enlace - nombre:
plantilla de archivo de servicio de copia :
old-src: node_exporter.service.j2
dest: /usr/lib/systemd/system/node_exporter.service - nombre: iniciar
servicio exportador_nodo :
nombre: exportador_nodo
estado: reiniciado
habilitado: sí
exportador_nodo.servicio.j2
- nombre: crear
[Unidad]
Descripción =
Documentación del exportador de nodo =
Después = network.target
[Servicio]
WorkingDirectory = / opt / prometheus / node_exporter /
ExecStart = / opt / prometheus / node_exporter / node_exporter
ExecStop = / bin / kill -KILL $ MAINPID
Tipo = simple
KillMode = grupo de control
Reiniciar = en caso de falla
RestartSec = 3s
[Instalar]
WantedBy = multi-user.target
alertmanager
alertmanager.yaml
- hosts: alertmanagers
usuario_remoto:
tareas raíz :- nombre: crear
archivo de directorio :
ruta: / opt / prometheus
estado: directorio - nombre: copiar archivo
unarchive:
old-src: alertmanager-0.21.0.linux-amd64.tar.gz
dest: / opt / prometheus - nombre: crear
archivo de enlace :
old-src: /opt/prometheus/alertmanager-0.21.0.linux-amd64
dest: / opt / prometheus / alertmanager
estado: enlace - nombre:
plantilla de archivo de servicio de copia :
old-src: alertmanager.service.j2
dest: /usr/lib/systemd/system/alertmanager.service - name: copy config yaml
template:
old-src: alertmanager.yml.j2
dest: /opt/prometheus/alertmanager/alertmanager.yml
notificar:- reiniciar alertmanager
- nombre: iniciar el
servicio del servidor :
nombre: alertmanager
estado: reiniciado
habilitado: sí
controladores: - nombre: reiniciar el
servicio alertmanager :
nombre: alertmanager
estado: reiniciado
alertmanager.service.j2
- nombre: crear
[Unidad]
Descripción =
Documentación de AlertManager =
Después = network.target
[Servicio]
WorkingDirectory = / opt / prometheus / alertmanager /
ExecStart = / opt / prometheus / alertmanager / alertmanager
ExecReload = / bin / kill -HUP $ MAINPID
ExecStop = / bin / kill -KILL $ MAINPID
Tipo = simple
KillMode = grupo de control
Reiniciar = en caso de falla
RestartSec = 3s
[Instalar]
WantedBy = multi-user.target
alertmanager.yml.j2 这里 运用 了 邮箱 告警
global:
resolve_timeout: 5m # Cuando el estado de la alarma tiene un cambio de disparo para resolverse, cuánto tiempo pasará antes de que se publique el anuncio.
smtp_from: “[email protected]”
smtp_smarthost: 'smtp.qq.com: 465'
smtp_auth_username: “[email protected]” # Cuenta de correo electrónico
smtp_auth_password: “bcvizcgqbgojjjeb” # Contraseña, contraseña no
port
route:
group_by: ['alertname'] # Qué etiqueta se usa como agrupación según
group_wait: 10s # Tiempo de espera del grupo 10s
group_interval: 10s # La distancia y el tiempo entre los grupos superior e inferior para enviar alarmas 10s
repeat_interval: 24h # Repetir enviando la hora de la alarma. La hora predeterminada no enviará la misma alarma repetidamente.
Receptor silencioso : 'receptor predeterminado' # aceptador predeterminado
Todas las alarmas que no coincidan con las siguientes subrutas se guardarán en el nodo raíz y se enviarán al 'receptor predeterminado'
rutas: # Grupo
- receptor: 'db'
group_wait: 10s
match_re:El uso de alarmas coincidentes regulares contiene dos servicios, que se envían a db
service: mysql | redis #Todo el servicio = mysql o service = redis las alarmas se asignan al extremo receptor de la base de datos - receptor: 'web'
group_by: [producto, entorno] # Utilice etiquetas de producto y entorno como base de agrupación
coincidencia:
equipo: frontend # Todas las etiquetas de alarma con frontend se envían a los
receptores web : - nombre: 'receptor predeterminado'
email_configs:- a: '[email protected]' # Destinatario de la alarma
- nombre: 'db'
# Enviar alarma por correo electrónico
email_configs: -to
: '[email protected]' - name: 'web'
email_configs: -to:
'[email protected]'
inhibit_rules: # Inhibit, pero ambos están alarmados. Si el nivel es severo, la advertencia de nivel se inhibirá y solo se producirán alarmas de nivel grave- source_match:
severity: 'critic' # La alarma crítica suprimirá la información de alarma de nivel de advertencia
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
- source_match: