Les microservices Spring Cloud se battent pour créer un système de coupons au niveau de l'entreprise

télécharger: les microservices Spring Cloud combat réel pour créer un système de coupons au niveau de l'entreprise

Il existe de nombreux didacticiels sur la page d'accueil du commerce électronique, mais il existe peu de didacticiels complets et pratiques sur le système de coupons. Ce cours créera un système de coupons à la main, basé sur le cadre de développement de microservices Java traditionnel SpringCloud, combiné avec les outils couramment utilisés MySQL, Redis et Kafka, et complétera l'activité principale du système de coupons de commerce électronique à travers les trois microservices de coupon modèle, distribution et règlement. C'est un outil indispensable
pour que les amis s'installent, augmentent le salaire, changent d'emploi et se transforment .
Adapté à la foule
Les étudiants qui ont terminé la planification et les demandeurs d'emploi
qui se préparent pour les entretiens. Les étudiants intéressés par le système de coupons de commerce électronique.
Exigences de réserve technique.
Familier avec les applications de base du framework Spring et SpringMVC.
Comprendre les commandes courantes de MySQL, Redis et Kafka.

Ansible déploie le
déploiement simple prometheus + node-exportateur du système de surveillance prometheus

yum device ansible
yum install ansible
ansible hosts file

[alertmanagers]
10.9.119.1
[prometheus]
10.9.119.1
[node-exportateur]
10.9.119.1
10.9.119.2
10.9.119.3 Le
format de la hiérarchie des fichiers est le suivant:

prometheus
prometheus.yml

  • hosts: prometheus
    remote_user:
    tâches root :
    • nom: créer un
      fichier dir :
      chemin: / opt / prometheus
      état: répertoire # Créer s'il n'y a pas de répertoire
    • name: copier le fichier
      désarchiver:
      old-src: prometheus-2.24.0.linux-amd64.tar.gz
      dest: / opt / prometheus
    • nom: créer un
      fichier de lien :
      old-src: /opt/prometheus/prometheus-2.24.0.linux-amd64
      dest: / opt / prometheus / prometheus
      state: link # 软 链接
    • nom: copie du
      modèle de fichier de service :
      old-src: prometheus.service.j2
      dest: /usr/lib/systemd/system/prometheus.service
    • nom: copier le
      modèle de configuration yaml :
      old-src: prometheus.yml.j2
      dest: /opt/prometheus/prometheus/prometheus.yml
      notifier:
      • redémarrer prométhée
    • nom: créer des règles
      fichier dir :
      chemin: / opt / prometheus / prometheus / rules
      état: répertoire
    • name: copy rules yaml # Il y a des symboles spéciaux dans le nœud, utilisez donc copy
      copy:
      old-src: node.yml
      dest: /opt/prometheus/prometheus/rules/node.yml
      notifier: # Cette action déclenchera les gestionnaires
      • redémarrer prométhée
    • nom: démarrer le
      service prometheus :
      nom: prometheus
      état: démarré
      activé: oui
      gestionnaires:
    • name: restart prometheus
      service:
      name: prometheus
      state: restarted
      prometheus.service.j2 Le module de copie peut être utilisé, et le modèle est utilisé ici

[Unité]
Description =
Documentation Prometheus =
After = network.target
[Service]
WorkingDirectory = / opt / prometheus / prometheus
ExecStart = / opt / prometheus / prometheus / prometheus
ExecReload = / bin / kill -HUP $ MAINPID
ExecStop = / bin / kill -KILL $ MAINPID
Type = simple
KillMode = control-group
Restart = on-failure
RestartSec = 3s
[Install]
WantedBy = multi-user.target
prometheus.yml.j2

Configuration globale

global:
scrape_interval: 30s #Grabbing distance time
evaluation_interval: 30s
#Rule moteur exécution distance temps query_log_file: ./promql.log

Configuration d'alarme

alerte:
alertmanagers: # Alertmanagers 配置

  • static_configs: # Configuration statique d'Alertmanager
    • cibles: # alertmanager envoi de la configuration de destination
      {% pour alertmanager dans les groupes ['alertmanagers']%}
      • { {alertmanager}}: 9093
        {% endfor%}
        rule_files: # Configuration du fichier de règles
  • "
    Rules /*.yml" scrape_configs: # configuration de saisie
  • job_name: 'prometheus' #Task collection purpose classification
    static_configs: # Capture purpose configuration statique
    • cibles:
      {% pour prometheu dans les groupes ['prometheus']%}
      • "{ {prometheu}}: 9090" #Grabbing purpose
        {% endfor%}
  • nom_travail: "node"
    static_configs:
    • cibles:
      {% pour le nœud dans les groupes ['node-exporter']%}
      • "{ {Node}}: 9100"
        {% endfor%}
        règles de nœud

groupes:

  • name: node.rules #
    Règles de titre du groupe de règles d' alarme :

    • alert: node is Down
      expr: up == 0
      for: 30s #Duration, ce qui signifie que si aucune information n'est obtenue pendant 30 secondes, une alarme sera déclenchée
      labels:
      severity: serious # Label personnalisé
      annotations sérieuses :
      résumé: "Instance { {$ labels.instance}} down "#
      Description récapitulative personnalisée :" { {$ labels.instance}} de la tâche { {$ labels.job}} est en panne depuis plus de 5 minutes. "# Description détaillée personnalisée
    • alert: node
      Système de fichiers expr: 100 - (node_filesystem_free_bytes {fstype = ~ "ext4 | xfs"} / node_filesystem_size_bytes {fstype = ~ "ext4 | xfs"} * 100)> 80
      pour: 2m
      étiquettes:
      gravité:
      annotations d' avertissement :
      résumé: " { { Erreur d'analyse KaTeX: 'EOF' attendu, a obtenu '}' à la position 16: labels.instance} ̲}: { { labels.mountpoint}} 分区 运用 过高 " description:" { { Erreur d'analyse KaTeX: 'EOF attendu ', a obtenu'} 'à la position 16: labels.instance} ̲}: { { labels.mountpoint}} 分区 运用 大于 80% (当前 值: { {$ value}}) "
    • alert: node Memory
      expr: 100- (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100> 80
      pour: 2m
      labels:
      gravité:
      annotations d' avertissement :
      résumé: "{ { TeX'OF parse error ', erreur d'analyse de KaO attendue: erreur obtenu la position 16: labels.instance} ̲}: l'utilisation de la mémoire est trop élevée "de ... labels.instance}}: l'utilisation de la mémoire est supérieure à 80% (valeur actuelle: { {$ value}})"
    • alert: node CPU
      expr: 100 - (avg (irate (node_cpu_seconds_total {mode = “idle”} [5m])) by (instance) * 100)> 80
      for: 2m
      labels:
      severity: warning
      annotations:
      summary: “{ { Erreur d'analyse KaTeX: 'EOF' attendu, obtenu '}' à la position 16: labels.instance} ̲}: CPU 运用 过高 "d… labels.instance}}: CPU 运用 大于 80% (当前 值: { {$ value }}) ” Node-exporter node-exporter.yml

  • hôtes: noeud-exportateur
    remote_user:
    tâches racine :

    • nom: créer un
      fichier dir :
      chemin: / opt / prometheus
      état: répertoire
    • name: copier le fichier
      désarchiver:
      old-src: node_exporter-1.0.1.linux-amd64.tar.gz
      dest: / opt / prometheus
    • nom: créer un
      fichier de lien :
      old-src: /opt/prometheus/node_exporter-1.0.1.linux-amd64
      dest: / opt / prometheus / node_exporter
      état: lien
    • nom: copie du
      modèle de fichier de service :
      old-src: node_exporter.service.j2
      dest: /usr/lib/systemd/system/node_exporter.service
    • nom: démarrer le
      service node_exporter :
      nom: node_exporter
      état: redémarré
      activé: oui
      node_exporter.service.j2

[Unité]
Description = Node Exporter
Documentation =
After = network.target
[Service]
WorkingDirectory = / opt / prometheus / node_exporter /
ExecStart = / opt / prometheus / node_exporter / node_exporter
ExecStop = / bin / kill -KILL $ MAINPID
Type = simple
KillMode = control-group
Restart = on-failure
RestartSec = 3s
[Install]
WantedBy = multi-user.target
alertmanager
alertmanager.yaml

  • hosts: alertmanagers
    remote_user:
    tâches root :
    • nom: créer un
      fichier dir :
      chemin: / opt / prometheus
      état: répertoire
    • name: copier le fichier
      désarchiver:
      old-src: alertmanager-0.21.0.linux-amd64.tar.gz
      dest: / opt / prometheus
    • nom: créer un
      fichier de lien :
      old-src: /opt/prometheus/alertmanager-0.21.0.linux-amd64
      dest: / opt / prometheus / alertmanager
      état: lien
    • nom: copie du
      modèle de fichier de service :
      old-src: alertmanager.service.j2
      dest: /usr/lib/systemd/system/alertmanager.service
    • nom: copier le
      modèle de configuration yaml :
      old-src: alertmanager.yml.j2
      dest: /opt/prometheus/alertmanager/alertmanager.yml
      notifier:
      • redémarrer alertmanager
    • nom: démarrer le
      service du serveur :
      nom: alertmanager
      état: redémarré
      activé: oui
      gestionnaires:
    • nom: redémarrer le
      service alertmanager :
      nom: alertmanager
      état: redémarré
      alertmanager.service.j2

[Unité]
Description =
Documentation AlertManager =
After = network.target
[Service]
WorkingDirectory = / opt / prometheus / alertmanager /
ExecStart = / opt / prometheus / alertmanager / alertmanager
ExecReload = / bin / kill -HUP $ MAINPID
ExecStop = / bin / kill -KILL $ MAINPID
Type = simple
KillMode = control-group
Restart = on-failure
RestartSec = 3s
[Install]
WantedBy = multi-user.target
alertmanager.yml.j2 这里 运用 了 邮箱 告警

global:
resolution_timeout: 5m # Lorsque l'état de l'alarme a un changement de déclenchement à résoudre, combien de temps cela prendra-t-il avant que l'annonce ne soit publiée.
smtp_from: "[email protected]"
smtp_smarthost: "smtp.qq.com: 465"
smtp_auth_username: "[email protected]" # Compte de messagerie
smtp_auth_password: "bcvizcgqbgojjjeb" # Mot de passe, non-
Qrequire_passe4_mot de passe smtp
route:
group_by: ['alertname'] # Quelle étiquette est utilisée comme groupe selon
group_wait: 10s # Temps d'attente du groupe 10s
group_interval: 10s # La distance et le temps entre les groupes supérieur et inférieur pour envoyer les alarmes 10s
repeat_interval: 24h # Repeat envoi de l'heure de l'alarme. La valeur par défaut 1h n'enverra pas la même alarme à plusieurs reprises.
Récepteur silencieux : 'default-receiver' # accepteur par défaut

Toutes les alarmes qui ne correspondent pas aux sous-routes suivantes seront enregistrées dans le nœud racine et envoyées au «récepteur par défaut»

routes: # Groupe

  • récepteur: 'db'
    group_wait: 10s
    match_re:

    L'utilisation d'alarmes de correspondance régulières contient deux services, qui sont envoyés à db

    service: mysql | redis #All service = mysql ou service = les alarmes redis sont allouées à l'extrémité de réception de la base de données
  • receiver: 'web'
    group_by: [produit, environnement] # Utilisez les balises produit et environnement comme base de regroupement
    match:
    team: frontend # Toutes les balises d'alarme avec frontend sont envoyées aux
    récepteurs Web :
  • name: 'default-receiver'
    email_configs:
  • name: 'db'
    # Envoyer l'alarme par e-mail
    email_configs: -to
    : '[email protected]'
  • name: 'web'
    email_configs: -to:
    '[email protected]'
    inhibit_rules: # Inhibit, mais les deux sont alarmés. Si le niveau est sévère, l'avertissement de niveau sera inhibé et seules les alarmes de niveau sévères se produiront
    • source_match: severity:
      'critical' # L'alarme critique supprimera les informations d'alarme de niveau d'avertissement
      target_match: severity
      : 'warning'
      égal: ['alertname', 'dev', 'instance']

Je suppose que tu aimes

Origine blog.csdn.net/qiusuo123456/article/details/114444355
conseillé
Classement