Une façon de gérer la surveillance visuelle du démarrage du printemps!

Pile technologique Java 2021-09-15 10:19:09
une fa rer la surveillance


1、Introduction

Quand une application fonctionne dans un environnement de production,Il est nécessaire de surveiller son état de santé.Comprendre la santé de l'application en temps réel,Vous pouvez être averti avant que le problème ne se produise,Il est également possible de résoudre le problème avant que le client ne le remarque.

Dans cet article,Nous allons créer unSpring BootApplication,InSpring Actuator,Micrometer,PrometheusEtGrafanaPour aider à surveiller le système.Parmi eux,Spring ActuatorEtMicrometer- Oui.Spring Boot AppUne partie de.

Le but des différents composants est brièvement décrit:

  • Spring Actuator:Offre beaucoup dans les applications Web Interface,En savoir plus sur l'état interne de l'exécution de l'application.En savoir plus,VoirSpring Boot 2.0DansSpring Boot Actuator.
  • Micrometer:Pour Java La collecte de données sur le rendement sur la plateforme offre un API,Il offre plusieurs types de mesures(Timers、Guauges、CountersAttendez.),Prise en charge simultanée de l'accès à différents systèmes de surveillance,Par exemple Influxdb、Graphite、Prometheus Attendez..Spring Boot ActuatorCela a été soutenu..
  • Prometheus: Une base de données de séries chronologiques , Pour la collecte des indicateurs .
  • Grafana: Tableau de bord pour l'affichage des indicateurs .

En bas, Nous présenterons chaque composante séparément . Le code utilisé dans cet article est archivé dans GitHubAllez..

2、 Créer un exemple d'application

La première chose à faire est de créer une application qui peut être surveillée .AdoptionSpring Initializr,Et ajouterSpring Boot Actuator,PrometheusEtSpring WebDépendances, Nous avons créé un Spring MVCApplication.

@RestController
public class MetricsController {
@GetMapping("/endPoint1")
public String endPoint1() {
return "Metrics for endPoint1";
}
@GetMapping("/endPoint2")
public String endPoint2() {
return "Metrics for endPoint2";
}
}

Démarrer l'application:

$ mvn spring-boot:run

Vérifier que l'interface est normale :

$ curl http://localhost:8080/endPoint1Metrics for endPoint1$ curl http://localhost:8080/endPoint2Metrics for endPoint2

ValidationSpring ActuatorInterface. Pour faciliter la lecture des réponses ,Nous passonspython -mjson.tool Pour formater l'information .

$ curl http://localhost:8080/actuator | python -mjson.tool
...
{
"_links":{
"self":{
"href":"http://localhost:8080/actuator",
"templated":false
},
"health":{
"href":"http://localhost:8080/actuator/health",
"templated":false
},
"health-path":{
"href":"http://localhost:8080/actuator/health/{*path}",
"templated":true
},
"info":{
"href":"http://localhost:8080/actuator/info",
"templated":false
}
}
}

Par défaut, Les informations ci - dessus sont affichées .En plus de ça,,Spring Actuator Plus d'informations disponibles , Mais vous devez l'activer .Pour activerPrometheus, Vous devez ajouter les informations suivantes à application.propertiesDans le document.

management.endpoints.web.exposure.include=health,info,prometheus

Redémarrer l'application ,Accès àhttp://localhost:8080/actuato...DePrometheusExtraire les données, Un grand nombre d'informations métriques disponibles ont été retournées. . Nous ne montrons ici qu'une petite partie de la sortie , Parce que c'est une longue liste .

$ curl http://localhost:8080/actuator/prometheus
# HELP jvm_gc_pause_seconds Time spent in GC pause
# TYPE jvm_gc_pause_seconds summary
jvm_gc_pause_seconds_count{action="end of minor GC",cause="G1 Evacuation Pause",} 2.0
jvm_gc_pause_seconds_sum{action="end of minor GC",cause="G1 Evacuation Pause",} 0.009
...

Comme indiqué précédemment,J'en ai besoin.Micrometer.Micrometer Fournit un tableau de bord simple pour les systèmes de surveillance les plus populaires , Autoriser l'instrumentation JVMApplication, Sans se soucier du fournisseur .Son rôle etSLF4JSimilaire, C'est juste qu'il ne se concentre pas sur Logging(Log),Mais...application metrics( Indicateurs d'application ).Bref, C'est le monde de la surveillance appliquée. SLF4J.

Spring Boot ActuatorPourMicrometer Configuration automatique fournie .Spring Boot2Inspring-boot-actuatorIntroduit dansmicrometer,C'est exact.1.xDemetricsReconstruit, En outre, le système de surveillance supportant l'amarrage est plus riche (AtlasDatadogGangliaGraphiteInfluxJMXNewRelicPrometheusSignalFxStatsDWavefront).

Mise à jourapplication.propertiesLa documentation est la suivante::

management.endpoints.web.exposure.include=health,info,metrics,prometheus

Redémarrer l'application ,Et dehttp://localhost:8080/actuator/metricsRécupération des données.

$ curl http://localhost:8080/actuator/metrics | python -mjson.tool
...
{
"names": [
"http.server.requests",
"jvm.buffer.count",
"jvm.buffer.memory.used",
...

Vous pouvez récupérer des informations spécifiques directement à partir du nom de l'indicateur .Par exemple,Si la requêtehttp.server.requestsIndicateurs, Peut être récupéré comme suit: :

$ curl http://localhost:8080/actuator/metrics/http.server.requests | python -mjson.tool
...
{
"name": "http.server.requests",
"description": null,
"baseUnit": "seconds",
"measurements": [
{
"statistic": "COUNT",
"value": 3.0
},
{
"statistic": "TOTAL_TIME",
"value": 0.08918682
},
...

3、AjouterPrometheus

Prometheus- Oui.Cloud Native Computing Foundation Un système de surveillance Open Source . Parce que l'une de nos applications /actuator/Prometheus Point final pour Prometheus Saisir les données, Donc vous pouvez maintenant configurer Prometheus Pour surveiller le vôtre. Spring BootApplication.

Prometheus Il existe plusieurs méthodes d'installation ,Dans cet article,Nous serons àDockerFonctionnement dans un conteneurPrometheus.

Vous devez créer unprometheus.ymlDocumentation, To add to DockerDans le récipient.

global:
scrape_interval:15s
scrape_configs:
- job_name: 'myspringmetricsplanet'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['HOST:8080']
  • scrape_interval:Prometheus Mesure de la fréquence des sondages d'application
  • job_name: Nom de la tâche de vote
  • metrics_path:IndicateursURLChemin vers
  • targets: Nom d'hôte et numéro de port .Lors de l'utilisation,RemplacerHOST Pour l'hôte IPAdresse

Si dansLinuxRechercherIP L'adresse est difficile. ,Vous pouvez utiliser la commande suivante:

$ ip -f inet -o addr show docker0 | awk '{print $4}' | cut -d '/' -f 1

DémarrageDocker Conteneur et local prometheus.ymlDocumentation,Mapping toDocker Fichiers dans le conteneur .

$ docker run \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus

Démarrage réussi DockerDerrière le conteneur,Vérifier d'abordPrometheus Est capable de passer http://localhost:9090/targetsCollecte de données.

Comme le montre la figure ci - dessus, On s'est rencontrés. context deadline exceededErreur,CausePrometheus Impossible d'accéder à Spring BootApplication.Comment le résoudre??

Peut être réalisé enDocker Conteneur ajouté à votre réseau hôte pour résoudre cette erreur ,Cela permettraPrometheusAccès àSpring BootApplication.

$ docker run \
--name prometheus \
--network host \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
-d \
prom/prometheus

Revalidation, L'indication de statut est UP.

Peut maintenant être affiché PrometheusIndicateurs.Accèshttp://localhost:9090/graph,Saisissez dans la zone de recherchehttp_server_requests_seconds_maxEt cliquez sur“Mise en œuvre”Boutons, Vous recevrez le délai maximal d'exécution de la demande .

4、AjouterGrafana

Le dernier composant ajouté est Grafana.Bien quePrometheus Les indicateurs peuvent être affichés ,Mais...Grafana Peut vous aider à afficher les paramètres dans un tableau de bord plus sophistiqué .Grafana Plusieurs modes d'installation sont également pris en charge ,Dans cet article,Nous allons égalementDocker Il fonctionne dans un conteneur .

$ docker run --name grafana -d -p 3000:3000 grafana/grafana

Cliquez sur http://localhost:3000/,Est accessibleGrafana.

Nom d'utilisateur par défaut /Le mot de passe estadmin/admin.Cliquez sur“Connexion”Après le bouton, Vous devez changer le mot de passe par défaut .

La prochaine chose à faire est d'ajouter une source de données . Cliquez sur “Configuration”Icônes,Puis sélectionnez“Data Sources(Source des données)”.

Cliquez surAdd data source(Ajouter une source de données)Boutons.

Prometheus En haut de la Liste ,SélectionnerPrometheus.

Remplir accessible PrometheusDeURL,Oui.HTTP AccessSet toBrowser, Puis cliquez sur le Save&TestBoutons.

Quand tout va bien, , Affiche une bannière de notification verte , Indique que la source de données fonctionne .

Il est temps de créer un tableau de bord . Vous pouvez personnaliser , Mais vous pouvez également utiliser un tableau de bord Open Source .Pour afficherSpring Boot Un tableau de bord commun pour les indicateurs est: JVMTableau de bord.

Dans la barre latérale gauche ,Cliquez sur+No., Puis Sélectionnez importer .

EntréeJVM Du tableau de bord URL https://grafana.com/grafana/d...,Puis cliquez sur“Load(Chargement)”Boutons.

Saisissez un nom significatif pour le tableau de bord (Par exempleMySpringMonitoringPlanet),SélectionnerPrometheusComme source de données,Puis cliquez surImportBoutons.

Jusqu'à présent, Vous pouvez utiliser un GrafanaTableau de bord.

Vous pouvez également ajouter des panneaux personnalisés au tableau de bord . En haut du tableau de bord ,Cliquez surAdd panel( Ajouter un panneau )Icônes.

Cliquez surAdd new panel( Ajouter un nouveau panneau ).

InMetrics Dans le champ,Entréehttp_server_requests_seconds_max, Dans la barre de droite Panel titleDans le champ, Vous pouvez saisir un nom pour le panneau .

Enfin,Cliquez dans le coin supérieur droitApply Boutons, Votre panneau sera ajouté au tableau de bord . N'oubliez pas de sauvegarder le tableau de bord .

Définir une certaine charge utile pour l'application , Et voir sur le tableau de bord http_server_requests_seconds_max Qu'est - il arrivé aux indicateurs? .

$ watch -n 5 curl http://localhost:8080/endPoint1$ watch -n 10 curl http://localhost:8080/endPoint2

5、Conclusions

Dans cet article, Nous avons appris à faire Spring Boot L'application ajoute une surveillance de base . C'est très facile. , Il suffit de passer Spring Actuator,Micrometer,PrometheusEtGrafanaUtilisation combinée.

Bien sûr.,Ce n'est qu'un début., Mais à partir de là, ,Vous pouvezSpring Boot Extension et configuration de l'application plus 、 Indicateurs plus spécifiques .

Original: ANGLAIS:https://mydeveloperplanet.com...

Traduction:https://www.kubernetes.org.cn...

Recommandations récentes:

1.1,000+ Dow. JavaQuestions d'entrevue et Organisation des réponses(2021Dernière édition)

2.Arrête de remplir l'écran. if/ else C'est,Essayez le mode Stratégie,Ca sent bon!!!

3.Merde!!Java Dans xx ≠ null Quelle nouvelle syntaxe??

4.Spring Boot 2.5 Libération de poids lourds,Le mode sombre est trop explosif.!

5.《JavaManuel de développement(Songshan Edition)》Dernière publication,Téléchargement rapide!

C'est bien.,N'oublie pas d'être gentil.+Avant.!

版权声明
本文为[Pile technologique Java]所创,转载请带上原文链接,感谢
https://javamana.com/2021/09/20210915101454123G.html

  1. 10天拿到字節跳動Java崗比特offer,Java知識點思維導圖
  2. 10 jours pour obtenir un Byte Jump Java post offer, Java Knowledge point Mind Map
  3. 10 jours pour obtenir l'octet Jump Java post offer, apprendre les étapes du développement Java
  4. Java version of gppc Reality Three: server side stream
  5. Linux Series: Dites - lui qu'il ne connaît pas kill du tout
  6. "Data structure and algorithm" of front end -- binary search
  7. 2020-2021京东Java面试真题解析,如何才能通过一线互联网公司面试
  8. 13 SpringBoot整合RocketMQ实现过滤消息-根据SQL表达式过滤消息
  9. 12 SpringBoot整合RocketMQ实现过滤消息-根据TAG方式过滤消息
  10. 11 SpringBoot整合RocketMQ实现事务消息
  11. 11 springboot Consolidated rocketmq Implementation transaction message
  12. 12 springboot Consolidated rocketmq Implements Filtering messages - Filtering messages according to tag method
  13. 13 springboot Consolidated rocketmq Implementation Filtering messages - Filtering messages according to SQL expressions
  14. linux系列之:告诉他,他根本不懂kill
  15. (1)java Spring Cloud+Spring boot企业快速开发架构之微服务是什么?它的优缺点有哪些?
  16. Oracle 检查 DATE 列 RANGE 分区表已有分区的最大日期时间
  17. ConcurrentHashMap--原理
  18. 2020 - 2021 JD Java interview Real question Analysis, How can interview through First - Line Internet Company
  19. Concurrenthashmap - - Principes
  20. Oracle vérifie l'heure de date maximale d'une partition existante dans la colonne date
  21. Docker Compose 实践及梳理
  22. Qu'est - ce qu'un microservice pour Java Spring Cloud + Spring Boot Enterprise Quick Development architecture?Quels sont ses avantages et ses inconvénients?
  23. Plus sign interview knowledge points in Java
  24. Pratique et organisation de la composition des dockers
  25. Linux Series: Dites - lui qu'il ne connaît pas kill du tout
  26. Convenient CSS and jQuery drop-down menu solution
  27. Linux analog packet loss rate
  28. Redis:我是如何与客户端进行通信的
  29. 15 useful cron work examples commonly used by Senior Linux system administrators
  30. 24个 JavaScript 循环遍历方法,你都知道吗?
  31. Reading notes of JavaScript advanced programming (3rd Edition) 4
  32. 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)
  33. 24 méthodes de traversée de boucle Javascript, vous savez?
  34. 30 minutes pour apprendre à ouvrir le tableau de bord k8s (kubernets) dans le docker (explication graphique)
  35. Redis: comment je communique avec les clients
  36. Wsl2: Windows native Linux subsystem
  37. 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)
  38. Docker Compose 实践及梳理
  39. Python高级用法总结(8)-函数式编程
  40. 261页前端面试题宝典,JavaScript变量声明提升
  41. The performance of JVM and Java applications of the same version differs by 30% on X86 and aarch64 platforms. Why?
  42. Page 261: dictionnaire des questions d'entrevue de première ligne, promotion de la Déclaration des variables JavaScript
  43. Python Advanced use Summary (8) - functional Programming
  44. Pratique et organisation de la composition des dockers
  45. 30 minutes pour apprendre à ouvrir le tableau de bord k8s (kubernets) dans le docker (explication graphique)
  46. [design pattern series] simple factory
  47. 2021Java最新大厂面试真题,阿里技术专家深入讲解
  48. Java equals and==
  49. Spring5(五)——AOP
  50. 海量列式非关系数据库HBase 原理深入
  51. java collections
  52. 海量列式非關系數據庫HBase 原理深入
  53. Base de données non relationnelle à grande échelle
  54. Printemps 5 (v) - AOP
  55. 2021 le dernier vrai problème d'entrevue d'usine de Java, expliqué en profondeur par les experts techniques d'Ali
  56. Java knowledge structure diagram and thinkinjava PDF file
  57. Do redis transactions satisfy atomicity?
  58. Java programmers must master 10 open source tools!
  59. [Cao Gong's essay] talk about the contract between Maven framework and plug-ins
  60. What books are better for learning Java