Statistiques de surveillance du démarrage du printemps (surveillance SQL, enregistrement SQL lent, surveillance du printemps, publicité)

Programmation de jeux 2022-06-23 17:10:13 阅读数:411

statistiquessurveillancedumarragedu
Jouez. SpringBoot Statistiques de surveillance(SQLSurveillance、DoucementSQLEnregistrement、SpringSurveillance、Aller à la publicité) - No1Zhang.

Le chemin de la croissance des programmeurs
Internet/Programmeur/Technique/Partage des données

La lecture de cet article nécessite probablement 10 Minutes.
De:blog.csdn.net/weixin_44730681/article/details/107944048

1 Concepts de base

Druid - Oui.JavaLe meilleur pool de connexions de base de données dans la langue.
Bien que HikariCP Un peu plus vite,Mais, DruidCapable de fournir une surveillance et une extension puissantes ,C'est aussi le projet Open source d'Alibaba.
DruidC'est le pool de connexion à la base de données développé par Alibaba sous le nom de surveillance,En fonction、Performance、Extensibilité,Plus que tout autre pool de connexion à la base de données,Y compris:DBCP、C3P0、BoneCP、Proxool、JBoss DataSourceAttends, attends,Tue tout..
Druid Ça peut être surveillé. DB Connexion au pool et SQL Mise en œuvre de la Convention,Conçu pour la surveillance DB Pool de connexion.
Spring Boot Source de données par défaut HikariDataSource Avec JdbcTemplateDéjà décrit dans Spring Boot 2.x Utilisation par défaut Hikari Source des données ,Pour ainsi dire Hikari Avec Driud Tout est courant. Java Web Les meilleures sources de données.
EtDruidDéjà déployé sur Alibaba plus que600Demandes,Après plusieurs années de déploiement à grande échelle de l'environnement de production!

  • stat:DruidIntégré pour fournir un StatFilter ,Pour les informations statistiques de surveillance.

  • wall:DruidDéfenseSQLInjecter l'attaque WallFilter C'est parDruidDeSQL ParserAnalyse.DruidFourniSQL ParserÇa pourrait être dansJDBCInterception des couchesSQLTraiter en conséquence,Par exemple, sous - entrepôt et sous - table、Audit, etc..

  • log4j2:C'est Fonction de journalisation,Tu peux mettresqlLes déclarations sont imprimées àlog4j2 Pour résoudre les problèmes.

2 Ajouter une dépendance

pom.xml

<!-- AlibabadruidSource des données --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.23</version></dependency><!-- mysql8 Drive--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency><!--Utiliser log4j2 Journal de bord--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId></dependency><!--mybatis,Introduit SpringBootDe JDBC Module,Alors...,La valeur par défaut est d'utiliser hikari Comme source de données--><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> <exclusions> <!-- Exclure par défaut HikariCP Source des données --> <exclusion> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </exclusion> </exclusions></dependency>

3 Configurer les propriétés associées

  • ConfigurationDruidSource des données(Pool de connexion) :Comme avant c3p0、dbcp La source de données peut définir la taille d'initialisation de la connexion source de données、Nombre maximum de connexions、Temps d'attente、Nombre minimum de connexions Attends.,Druid L'isomorphisme des sources de données peut être défini;

  • Configuration Druid web Surveillance filter(WebStatFilter) :Ce filtre fonctionne comme une statistique web Appliquer toutes les informations de la base de données dans la demande,Par exemple, Envoyé sql Déclarations,sql Temps d'exécution、Nombre de demandes、Demande url Adresse、Etseesion Surveillance、Nombre d'accès à la table de base de données Attendez un peu!.

  • Configuration Druid Gestion des coulisses Servlet(StatViewServlet) :Druid La source de données a une fonction de surveillance,Et offre un web Interface conviviale,Installation similaire Routeur Heure,Il y a aussi une offre par défaut web Page;Paramètres requis Druid Propriétés de la page d'administration de fond pour,Par exemple, Compte de connexion、Mot de passe Attendez.; Attention!:
    Druid Spring Boot Starter Le nom de la propriété de configuration suit exactement Druid,Peut passer Spring Boot Profil pour configurerDruidPool de connexion à la base de données et surveillance,Utilisez la valeur par défaut si elle n'est pas configurée.

    application.yml

########## Configurer la source de données (Druid)##########spring: datasource: ########## JDBC Configuration de base ########## username: xxx password: xxx driver-class-name: com.mysql.cj.jdbc.Driver # mysql8 Connexion à l'entraînement url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai platform: mysql # Type de base de données type: com.alibaba.druid.pool.DruidDataSource # Spécifier le type de source de données ########## Pool de connexion Configuration ########## druid: # Configurer la taille d'initialisation、Minimum、Max. initial-size: 5 minIdle: 10 max-active: 20 # Configurer le temps d'attente pour obtenir la connexion(Unité:MS) max-wait: 60000 # Combien de fois configurez - vous l'intervalle de détection,Détecter les connexions inactives qui doivent être fermées,En millisecondes time-between-eviction-runs-millis: 2000 # Configurer une connexion pour une durée de vie minimale dans le pool,En millisecondes min-evictable-idle-time-millis: 600000 max-evictable-idle-time-millis: 900000 # Pour vérifier si la connexion est disponibleSQLDéclarations,Par défaut, chaque base de données est différente,C'estmysql validationQuery: select 1 # L'application demande une connexion au pool de connexion,EttestOnBorrowPourfalseHeure,Le pool de connexion déterminera si la connexion est inactive,Si oui,Vérifiez que cette connexion est disponible testWhileIdle: true # Si ouitrue,Par défautfalse,Lorsqu'une application demande une connexion au pool de connexion,Le pool de connexion déterminera si cette connexion est disponible testOnBorrow: false # Si ouitrue(Par défautfalse),Quand l'application a fini d'utiliser la connexion,Lorsque le pool de connexion récupère une connexion, il détermine si la connexion est encore disponible testOnReturn: false # Cache ou nonpreparedStatement,C'est - à - direPSCache.PSCacheAmélioration significative des performances des bases de données supportant les curseurs,Par exemple,oracle poolPreparedStatements: true # Pour activerPSCache,Doit être configuré plus grand que0,Quand il est plus grand que0Heure, poolPreparedStatementsLe déclenchement automatique est modifié entrue, # InDruidMoyenne,Il n'y aura pasOracleEn bas.PSCacheProblème d'utilisation excessive de la mémoire, # Vous pouvez configurer cette valeur plus grande,Par exemple,100 maxOpenPreparedStatements: 20 # Dans le pool de connexionminIdleConnexions en nombre,Temps libre supérieur àminEvictableIdleTimeMillis,Alors il va exécuterkeepAliveFonctionnement keepAlive: true # Spring Surveillance,Utilisationaop Temps d'exécution de l'interface spécifiée,jdbcCompter pour enregistrer aop-patterns: "com.springboot.template.dao.*" ########### Activer le filtre intégré(Le premier statIl faut,Sinon, il n'y a pas de surveillanceSQL)########## filters: stat,wall,log4j2 # Configurer vous - même pour surveiller l'interception statistiquefilter filter: # OuvertdruiddatasourceSurveillance de l'état stat: enabled: true db-type: mysql # Ouverture lentesqlSurveillance,Plus que2s Je pense que c'est lentsql,Enregistré dans le journal log-slow-sql: true slow-sql-millis: 2000 # Surveillance des journaux,Utiliserslf4j Effectuer la sortie du Journal slf4j: enabled: true statement-log-error-enabled: true statement-create-after-log-enabled: false statement-close-after-log-enabled: false result-set-open-after-log-enabled: false result-set-close-after-log-enabled: false ########## ConfigurationWebStatFilter,Pour la collectewebDonnées associées à la surveillance ########## web-stat-filter: enabled: true # Démarrage StatFilter url-pattern: /* # Filtrer touturl exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # Exclure certainsurl session-stat-enable: true # OuvertsessionFonctions statistiques session-stat-max-count: 1000 # sessionNombre maximum de,Par défaut100 ########## ConfigurationStatViewServlet(Page de surveillance),Pour présentationDruidStatistiques pour ########## stat-view-servlet: enabled: true # ActiverStatViewServlet url-pattern: /druid/* # Accès à la page de surveillance intégrée,La page d'accueil de la page de surveillance intégrée est/druid/index.html reset-enable: false # Il n'est pas permis de vider les statistiques,Recalculer login-username: root # Configurer le mot de passe d'accès à la page de surveillance login-password: 123 allow: 127.0.0.1 # Adresses auxquelles l'accès est autorisé,SiallowNon configuré ou vide,Autoriser tous les accès deny: # Adresse à laquelle l'accès est refusé,denyPriorité surallow,Si dansdenyDans la Liste,Même siallowDans la Liste,Il sera également rejeté

Les paramètres du profil ci - dessus peuvent être trouvés à com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties Et org.springframework.boot.autoconfigure.jdbc.DataSourceProperties Trouvé dans;

3.1 Comment configurer Filter

Peut passer spring.datasource.druid.filters=stat,wall,log4j ... Pour activer l'intégration correspondanteFilter,Mais çaFilterToutes les configurations par défaut.Si la configuration par défaut ne répond pas aux exigences,On peut renoncer à ça,Configurer par profilFilter,Voici quelques exemples:.

# ConfigurationStatFilter spring.datasource.druid.filter.stat.enabled=truespring.datasource.druid.filter.stat.db-type=h2spring.datasource.druid.filter.stat.log-slow-sql=truespring.datasource.druid.filter.stat.slow-sql-millis=2000# ConfigurationWallFilter spring.datasource.druid.filter.wall.enabled=truespring.datasource.druid.filter.wall.db-type=h2spring.datasource.druid.filter.wall.config.delete-allow=falsespring.datasource.druid.filter.wall.config.drop-table-allow=false

Pour l'instant, voici Filter Support de configuration fourni,Selon(spring.datasource.druid.filter.*)Configurer.

  • StatFilter

  • WallFilter

  • ConfigFilter

  • EncodingConvertFilter

  • Slf4jLogFilter

  • Log4jFilter

  • Log4j2Filter

  • CommonsLogFilter Je ne veux pas utiliser le Filters,Pour personnaliser Filter La configuration doit correspondre à Filter De enabled Set to true ,Druid Spring Boot Starter Désactivé par défaut StatFilter,Vous pouvez le faire enabled Set to true Pour l'activer.

3.2 Page de surveillance

(1)Après le lancement du projet,Accès à /druid/login.html Viens. Page de connexion ,Saisissez le nom d'utilisateur et le mot de passe pour vous connecter

Jouez. SpringBoot Statistiques de surveillance(SQLSurveillance、DoucementSQLEnregistrement、SpringSurveillance、Aller à la publicité) - No2Zhang.

(2) Page source des données Est actuelDataSourceInformations de base sur la configuration,Configuré ci - dessusFilterOn peut le trouver à l'intérieur,Si elle n'est pas configuréeFilter(Certaines informations ne seront pas comptées,Par exemple“SQLSurveillance”,Ne peut pas obtenirJDBCQuestions connexesSQLInformations sur l'exécution)

Jouez. SpringBoot Statistiques de surveillance(SQLSurveillance、DoucementSQLEnregistrement、SpringSurveillance、Aller à la publicité) - No3Zhang.

(3) SQLPage de surveillance ,Tout compte.SQLExécution des déclarations

Jouez. SpringBoot Statistiques de surveillance(SQLSurveillance、DoucementSQLEnregistrement、SpringSurveillance、Aller à la publicité) - No4Zhang.

(4) URLPage de surveillance ,Tout compte.ControllerAccès et mise en œuvre de l'interface

Jouez. SpringBoot Statistiques de surveillance(SQLSurveillance、DoucementSQLEnregistrement、SpringSurveillance、Aller à la publicité) - No5Zhang.

(5)Spring Page de surveillance,Utilisationaop Temps d'exécution de l'interface spécifiée,jdbcCompter pour enregistrer

Jouez. SpringBoot Statistiques de surveillance(SQLSurveillance、DoucementSQLEnregistrement、SpringSurveillance、Aller à la publicité) - No6Zhang.

(6) SQLPage pare - feu
druidAccès à la liste en noir et blanc,Vous pouvez voir clairementsqlProtection.
(7) SessionPage de surveillance
Vous pouvez voir lesessionSituation actuelle,Temps de création、Dernière activité、Nombre de demandes、Paramètres détaillés tels que le temps de demande.
(8) JSONAPI Page
AdoptionapiAccès formelDruidInterface de surveillance pour,apiRetour de l'interfaceJsonDonnées formelles.

4 sqlSurveillance

Configuration Druid web Surveillance filter( WebStatFilter )Ce filtre,Le rôle est de faire des statistiques web Appliquer toutes les informations de la base de données dans la demande,Par exemple, Envoyé sql Déclarations,sql Temps d'exécution、Nombre de demandes、Demande url Adresse、Etseesion Surveillance、Nombre d'accès à la table de base de données Attendez un peu!.

spring: datasource: druid: ########## ConfigurationWebStatFilter,Pour la collectewebDonnées associées à la surveillance ########## web-stat-filter: enabled: true # Démarrage StatFilter url-pattern: /* # Filtrer touturl exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # Exclure certainsurl session-stat-enable: true # OuvertsessionFonctions statistiques session-stat-max-count: 1000 # sessionNombre maximum de,Par défaut100

5 DoucementsqlEnregistrement

Parfois...,Il y a desSQLMise en œuvre lente,Nous voulons utiliser le journal pour enregistrer,Peut être activéDruidLentSQLFonction d'enregistrement

spring: datasource: druid: filter: stat: enabled: true # OuvertDruidDataSourceSurveillance de l'état db-type: mysql # Type de base de données log-slow-sql: true # Ouverture lenteSQLFonction d'enregistrement slow-sql-millis: 2000 # Par défaut3000MS,Plus de2s,C'est lent.,Enregistré dans le journal

Après le démarrage,Si vous rencontrez une exécution lenteSQL,Et il sort dans le journal

6 spring Surveillance

Après la visitespringLa surveillance par défaut n'a pas de données;
Il faut importerSprngBootDeAOPDeStarter

<!--SpringBoot Deaop Module--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>

Besoin de application.yml Configuration:

SpringSurveillanceAOPPoint d'entrée,Par exemple:com.springboot.template.dao.*,Configurer plusieurs séparations de virgules anglaises

spring.datasource.druid.aop-patterns="com.springboot.template.dao.*"

7 Vas - y. Ad(Publicité)

Lors de l'accès à la page de surveillance,Vous pourriez être au bas de la page(footer)Voir l'annonce d'Alibaba
Raisons:IntroductiondruidDejarDans le sac common.js (Il y a un paragraphe à l'intérieur.jsLe Code est pour la pagefooterAnnonces supplémentaires)
Si vous voulez l'enlever,,Il y a deux façons:
(1) Annotation manuelle directe de ce code
Si utiliséMaven,Directement dans l'entrepôt local,Trouve ça.jarSac
Code à annoter:

// this.buildFooter();

common.jsEmplacement:

com/alibaba/druid/1.1.23/druid-1.1.23.jar!/support/http/resources/js/common.js

(2) Filtrer à l'aide d'un filtre
Enregistrer un filtre,Filtrationcommon.jsDemandes,Remplacer le contenu publicitaire pertinent par une expression régulière

@[email protected]@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled",havingValue = "true", matchIfMissing = true)public class RemoveDruidAdConfig { /** * Nom de la méthode: removeDruidAdFilterRegistrationBean * Description de la méthode Supprimer les annonces au bas de la page * @param properties com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties * @return org.springframework.boot.web.servlet.FilterRegistrationBean */ @Bean public FilterRegistrationBean removeDruidAdFilterRegistrationBean(DruidStatProperties properties) { // AccèswebParamètres de la page de surveillance DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); // Extractioncommon.jsChemin de configuration pour String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); final String filePath = "support/http/resources/js/common.js"; //CréationfilterFiltrer Filter filter = new Filter() { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); // Réinitialiser le tampon,L'en - tête de réponse ne sera pas réinitialisé response.resetBuffer(); // Accèscommon.js String text = Utils.readFromResource(filePath); // Remplacement régulierbanner, Supprimer les messages publicitaires en bas text = text.replaceAll("<a.*?banner\"></a><br/>", ""); text = text.replaceAll("powered.*?shrek.wang</a>", ""); response.getWriter().write(text); } @Override public void destroy() {} }; FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(filter); registrationBean.addUrlPatterns(commonJsPattern); return registrationBean; }}

Les deux peuvent,Il est recommandé d'utiliser le premier,S'attaquer aux causes profondes

8 Accès Druid Données de surveillance pour

Druid Les données de surveillance de Ouvert StatFilter Après ,Adoption DruidStatManagerFacade Obtenir;
DruidStatManagerFacade#getDataSourceStatDataList Cette méthode permet d'obtenir des données de surveillance pour toutes les sources de données,
En plus de ça, DruidStatManagerFacade D'autres méthodes sont également disponibles,Vous pouvez choisir d'utiliser.

@[email protected](value = "/druid")public class DruidStatController { @GetMapping("/stat") public Object druidStat(){ // Obtenir les données de surveillance de la source de données return DruidStatManagerFacade.getInstance().getDataSourceStatDataList(); }}

<END>
Lectures recommandées:

 Internet Junior Senior large Factory Interview Question (9- Oui.G)ContenuJavaBase、JavaWeb、MySQLOptimisation des performances、JVM、Verrouillage、Millions de concurrence、File d'attente des messages、Cache haute performance、Réflexe、SpringPrincipe du seau familial、Microservices、Zookeeper......Pile isotechnique! .Réception du texte original ! Je l'ai lu.

Auteur:Le chemin de la croissance des programmeurs

Programmation de jeux,Un favori pour le développement de jeux~

Si l'image n'est pas affichée depuis longtemps,Veuillez utiliserChromeNavigateur du noyau.

Copyright:Cet article est[Programmation de jeux]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2022/174/202206231625223536.html