APM监控--(二)Pinpoint部署手册

部署完成pinpoint之后,并没有开放报警功能,而报警是每个公司都必要的功能,以下就跟着我一起开始开发报警功能并部署到服务器。

1,下载源码包

地址:https://github.com/naver/pinpoint/releases

选择对应版本源码包,本次为1.7.1,单击下载



2,编译

源码在maven端增加了很多检查和限制,保证jdk版本1.8,maven为3.1.1就可以去除这些限制,修改后pom文件为:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <organization>
        <name>Naver Corporation</name>
        <url>http://www.navercorp.com/</url>
    </organization>
    <groupId>com.navercorp.pinpoint</groupId>
    <artifactId>pinpoint</artifactId>
    <version>1.7.1</version>
    <name>pinpoint</name>
    <packaging>pom</packaging>

    <repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
        <repository>
            <id>spring-maven-repository</id>
            <name>Spring Framework Maven Release Repository</name>
            <url>http://maven.springframework.org/release/</url>
        </repository>
        <repository>
            <id>spring-maven-release-remote</id>
            <name>Spring Framework Maven Release Remote Repository</name>
            <url>http://repo.spring.io/libs-release-remote/</url>
        </repository>
        <repository>
            <id>bintray</id>
            <name>bintray</name>
            <url>http://jcenter.bintray.com</url>
        </repository>
        <repository>
            <id>jboss-3rd-party-releases</id>
            <name>Jboss Third Party Repository</name>
            <url>https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>Maven central plugin repository</name>
            <url>http://repo1.maven.org/maven2/</url>
        </pluginRepository>
    </pluginRepositories>

    <modules>
        <module>annotations</module>
        <module>agent</module>
        <module>bootstrap-core</module>
        <module>bootstrap-core-optional</module>
        <module>bootstrap</module>
        <module>collector</module>
        <module>commons</module>
        <module>commons-hbase</module>
        <module>commons-server</module>
        <module>tools</module>
        <module>plugins</module>
        <module>profiler</module>
        <module>profiler-optional</module>
        <module>profiler-test</module>
        <module>rpc</module>
        <module>thrift</module>
        <module>test</module>
        <module>web</module>
        <module>hbase</module>
        <module>flink</module>
    </modules>

    <properties>
        <encoding>UTF-8</encoding>
        <jdk.version>1.8</jdk.version>
        <slf4j.version>1.7.21</slf4j.version>
        <metrics.version>3.1.2</metrics.version>
        <jetty.version>8.1.12.v20130726</jetty.version>
        <fastxml.jackson.version>2.6.7</fastxml.jackson.version>
        <httpcomponents.version>4.3</httpcomponents.version>
        <jedis.version>2.4.2</jedis.version>
        <cloverLicenseLocation>${basedir}/clover.license</cloverLicenseLocation>
        <spring.version>4.3.8.RELEASE</spring.version>
        <spring.batch.version>3.0.7.RELEASE</spring.batch.version>
        <spring.security.version>4.2.2.RELEASE</spring.security.version>
        <docker.maven.plugin.version>0.4.3</docker.maven.plugin.version>
        <cassandra.driver.version>2.1.7.1</cassandra.driver.version>
        <sniffer.artifactid>java16</sniffer.artifactid>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-annotations</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-commons</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-commons-server</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-commons-hbase</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-rpc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-thrift</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-bootstrap-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-bootstrap-core-optional</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-bootstrap</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-profiler</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-profiler-optional</artifactId>
                <type>pom</type>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-profiler-test</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-collector</artifactId>
                <type>war</type>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-collector</artifactId>
                <classifier>classes</classifier>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-web</artifactId>
                <version>${project.version}</version>
                <type>war</type>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-web</artifactId>
                <classifier>classes</classifier>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-plugins</artifactId>
                <type>pom</type>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-plugins</artifactId>
                <type>zip</type>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-tools</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-test</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.navercorp.pinpoint</groupId>
                <artifactId>pinpoint-flink</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- for spring test -->
            <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>1.2.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-websocket</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-oxm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-instrument</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <!-- serving performance metrics -->
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-core</artifactId>
                <version>${metrics.version}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-jvm</artifactId>
                <version>${metrics.version}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-servlets</artifactId>
                <version>${metrics.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${fastxml.jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${fastxml.jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${fastxml.jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-shaded-client</artifactId>
                <version>1.2.4</version>
            </dependency>

            <dependency>
                <groupId>com.sematext.hbasewd</groupId>
                <artifactId>hbasewd</artifactId>
                <version>0.1.0</version>
            </dependency>

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>

            <dependency>
                <groupId>commons-dbcp</groupId>
                <artifactId>commons-dbcp</artifactId>
                <version>1.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
                <version>2.1.1</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.2.7</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.mariadb.jdbc</groupId>
                <artifactId>mariadb-java-client</artifactId>
                <version>1.3.4</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.20</version>
            </dependency>
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>9.4.1207</version>
            </dependency>
            <dependency>
                <groupId>net.sourceforge.jtds</groupId>
                <artifactId>jtds</artifactId>
                <version>1.2.8</version>
            </dependency>

            <dependency>
                <groupId>com.ning</groupId>
                <artifactId>async-http-client</artifactId>
                <version>1.8.3</version>
            </dependency>

            <dependency>
                <groupId>org.asynchttpclient</groupId>
                <artifactId>async-http-client</artifactId>
                <version>2.0.32</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty</artifactId>
                <version>3.10.6.Final</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
                <version>4.0.18.Final</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>catalina</artifactId>
                <version>6.0.43</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>coyote</artifactId>
                <version>6.0.43</version>
            </dependency>

            <dependency>
                <groupId>com.navercorp.arcus</groupId>
                <artifactId>arcus-java-client</artifactId>
                <version>1.8.1</version>
            </dependency>
            <dependency>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache-core</artifactId>
                <version>2.6.9</version>
            </dependency>
            <dependency>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache</artifactId>
                <version>1.6.2</version>
            </dependency>
            <dependency>
                <groupId>com.datastax.cassandra</groupId>
                <artifactId>cassandra-driver-core</artifactId>
                <version>${cassandra.driver.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-redis</artifactId>
                <version>1.1.1.RELEASE</version>
            </dependency>

            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>${httpcomponents.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>${httpcomponents.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore-nio</artifactId>
                <version>${httpcomponents.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpasyncclient</artifactId>
                <version>4.0</version>
            </dependency>
            <dependency>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
                <version>3.1</version>
            </dependency>

            <dependency>
                <groupId>com.google.http-client</groupId>
                <artifactId>google-http-client</artifactId>
                <version>1.20.0</version>
            </dependency>

            <dependency>
                <groupId>com.squareup.okhttp</groupId>
                <artifactId>okhttp</artifactId>
                <version>2.5.0</version>
            </dependency>
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>3.8.1</version>
            </dependency>

            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>${jedis.version}</version>
            </dependency>


            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.5</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.5</version>
            </dependency>
            <dependency>
                <groupId>commons-collections</groupId>
                <artifactId>commons-collections</artifactId>
                <version>3.2.2</version>
            </dependency>
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.2</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.10</version>
            </dependency>
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>2.6</version>
            </dependency>
            <dependency>
                <groupId>commons-beanutils</groupId>
                <artifactId>commons-beanutils</artifactId>
                <version>1.9.3</version>
            </dependency>

            <dependency>
                <groupId>javax.transaction</groupId>
                <artifactId>jta</artifactId>
                <version>1.1</version>
            </dependency>
            <dependency>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
                <version>1.4.7</version>
            </dependency>




            <dependency>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.21.0-GA</version>
            </dependency>
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib-nodep</artifactId>
                <version>2.2</version>
            </dependency>

            <dependency>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm-debug-all</artifactId>
                <version>5.2</version>
            </dependency>

            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.8.10</version>
            </dependency>



            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>servlet-api</artifactId>
                <version>6.0.35</version>
            </dependency>

            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.0.1</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.1.0</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.0</version>
            </dependency>
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>



            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-library</artifactId>
                <version>1.3</version>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>2.7.22</version>
            </dependency>
            <dependency>
                <groupId>org.dbunit</groupId>
                <artifactId>dbunit</artifactId>
                <version>2.4.3</version>
            </dependency>


            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.5</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.jboss.netty</groupId>
                        <artifactId>netty</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- for zookeeper test -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-test</artifactId>
                <version>2.6.0</version>
                <exclusions>
                    <exclusion>
                        <artifactId>zookeeper</artifactId>
                        <groupId>org.apache.zookeeper</groupId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.thrift</groupId>
                <artifactId>libthrift</artifactId>
                <version>0.10.0</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.httpcomponents</groupId>
                        <artifactId>httpclient</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.httpcomponents</groupId>
                        <artifactId>httpcore</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>20.0</version>
            </dependency>
            <dependency>
                <groupId>com.google.inject</groupId>
                <artifactId>guice</artifactId>
                <version>4.1.0</version>
            </dependency>


            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.5.3</version>
            </dependency>

            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-client</artifactId>
                <version>5.13.2</version>
            </dependency>

            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxws</artifactId>
                <version>2.7.18</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http</artifactId>
                <version>2.7.18</version>
            </dependency>

            <dependency>
                <groupId>com.netflix.hystrix</groupId>
                <artifactId>hystrix-core</artifactId>
                <version>1.5.12</version>
            </dependency>

            <dependency>
                <groupId>io.vertx</groupId>
                <artifactId>vertx-core</artifactId>
                <version>3.3.3</version>
            </dependency>

            <dependency>
                <groupId>io.reactivex</groupId>
                <artifactId>rxjava</artifactId>
                <version>1.2.0</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <build>
        <resources>
            <resource>
                <directory>${basedir}/src/main/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <filtering>true</filtering>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
        </resources>

        <testResources>
            <testResource>
                <directory>${basedir}/src/test/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </testResource>
            <testResource>
                <filtering>true</filtering>
                <directory>${basedir}/src/test/resources</directory>
            </testResource>
        </testResources>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <attachClasses>true</attachClasses>
                        <classesClassifier>classes</classesClassifier>
                        <webappDirectory>${project.build.directory}/deploy</webappDirectory>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.6</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <encoding>${encoding}</encoding>
                </configuration>
            </plugin>
            <!-- compiler插件, 设定JDK版本 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>
           
            <plugin>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>maven-clover2-plugin</artifactId>
                <version>4.0.6</version>
                <configuration>
                    <encoding>${encoding}</encoding>
                    <jdk>${jdk.version}</jdk>
                    <generateXml>true</generateXml>
                    <generateHtml>true</generateHtml>
                    <generateHistorical>false</generateHistorical>
                    <licenseLocation>${cloverLicenseLocation}</licenseLocation>
                    <singleCloverDatabase>false</singleCloverDatabase>
                    <includesTestSourceRoots>false</includesTestSourceRoots>
                    <excludes>
                        <exclude>com/navercorp/pinpoint/thrift/dto/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/common/util/apache/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/common/util/jsr166/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/profiler/util/jdk/**/*.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            
            
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.6</version>
                <configuration>
                    <linkXRef>true</linkXRef>
                    <sourceEncoding>${encoding}</sourceEncoding>
                    <targetJdk>${jdk.version}</targetJdk>
                    <excludes>
                        <exclude>com/navercorp/pinpoint/thrift/dto/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/common/util/apache/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/common/util/jsr166/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/profiler/util/jdk/**/*.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.cj.jshintmojo</groupId>
                <artifactId>jshint-maven-plugin</artifactId>
                <version>1.6.0</version>
                <configuration>
                    <options>sub, boss, newcap, loopfunc</options>
                    <globals></globals>
                    <directories>
                        <directory>src/main/webapp</directory>
                    </directories>
                    <excludes>
                        <exclude>src/main/webapp/components</exclude>
                    </excludes>
                    <reporter>checkstyle</reporter>
                    <reportFile>${project.build.directory}/jshint.xml</reportFile>
                    <failOnError>false</failOnError>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.owasp</groupId>
                <artifactId>dependency-check-maven</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <nspAnalyzerEnabled>false</nspAnalyzerEnabled>
                    <format>xml</format>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>animal-sniffer-maven-plugin</artifactId>
                <version>1.15</version>
                <configuration>
                    <signature>
                        <groupId>org.codehaus.mojo.signature</groupId>
                        <artifactId>${sniffer.artifactid}</artifactId>
                        <version>1.0</version>
                    </signature>
                    <ignores>
                        <ignore>sun.*</ignore>
                    </ignores>
                </configuration>
                <executions>
                    <execution>
                        <id>ensure-java-${jdk.version}-class-library</id>
                        <phase>test</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <inherited>false</inherited>
                <configuration>
                    <aggregate>true</aggregate>
                    <inputEncoding>${encoding}</inputEncoding>
                    <outputEncoding>${encoding}</outputEncoding>
                    <windowTitle>Pinpoint ${project.version} Cross Reference</windowTitle>
                    <docTitle>Pinpoint ${project.version} Cross Reference</docTitle>
                </configuration>
                <version>2.5</version>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <configuration>
                    <excludeFilterFile>findbugs-exclude.xml</excludeFilterFile>
                    <xmlOutput>true</xmlOutput>
                    <xmlOutputDirectory>${project.build.directory}/findbugs</xmlOutputDirectory>
                </configuration>
                <version>3.0.3</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.6</version>
                <configuration>
                    <linkXRef>true</linkXRef>
                    <sourceEncoding>${encoding}</sourceEncoding>
                    <targetJdk>${jdk.version}</targetJdk>
                    <!-- <rulesets> <ruleset>/rulesets/unusedcode.xml</ruleset>
                        <ruleset>/rulesets/basic.xml</ruleset> <ruleset>/rulesets/imports.xml</ruleset>
                        <ruleset>/rulesets/design.xml</ruleset> </rulesets> -->
                    <excludes>
                        <exclude>com/navercorp/pinpoint/thrift/dto/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/common/util/apache/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/common/util/jsr166/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/profiler/util/jdk/**/*.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>maven-clover2-plugin</artifactId>
                <version>4.0.6</version>
                <configuration>
                    <includesTestSourceRoots>true</includesTestSourceRoots>
                    <licenseLocation>clover.license</licenseLocation>
                    <encoding>${encoding}</encoding>
                    <jdk>${jdk.version}</jdk>
                    <excludes>
                        <exclude>com/navercorp/pinpoint/thrift/dto/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/common/util/apache/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/common/util/jsr166/**/*.java</exclude>
                        <exclude>com/navercorp/pinpoint/profiler/util/jdk/**/*.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

    <profiles>
        <!-- for Local (Development) -->
        <profile>
            <id>local</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <env>local</env>
            </properties>
        </profile>
        <!-- for Release -->
        <profile>
            <id>release</id>
            <properties>
                <env>release</env>
            </properties>
        </profile>

        <profile>
            <id>klocwork</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.klocwork.ps</groupId>
                        <artifactId>kwmaven</artifactId>
                        <version>2.1.1</version>
                        <configuration>
                            <buildspec_filename>${KWINJECT_OUT_PATH}</buildspec_filename>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>validate</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

然后根目录执行 mvn clean install -Dmaven.test.skip=true

通过install命令将相关包安装进本地maven仓库之后,后期开发才没有问题。

3,新增报警类

开发工具加载web文件夹

web包下pom文件新增发送邮件依赖

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.6</version>
</dependency>


然后新增AlarmMessageSenderImple类,全路径如下:com.navercorp.pinpoint.web.alarm.AlarmMessageSenderImple

源码:

package com.navercorp.pinpoint.web.alarm;

import com.navercorp.pinpoint.web.alarm.checker.AlarmChecker;
import com.navercorp.pinpoint.web.alarm.mail.MailSenderInfo;
import com.navercorp.pinpoint.web.alarm.mail.SimpleMailSender;
import com.navercorp.pinpoint.web.service.UserGroupService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

/**
 * Created by 许恕 on 2018/4/3.
 */
public class AlarmMessageSenderImple implements AlarmMessageSender{
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private UserGroupService userGroupService;

    @Override
    public void sendSms(AlarmChecker checker, int sequenceCount) {

        List<String> receivers = userGroupService.selectPhoneNumberOfMember(checker.getuserGroupId());

        if (receivers.size() == 0) {
            return;
        }

        List<String> sms = checker.getSmsMessage();

        for (String message : sms) {
            logger.info("send SMS : {}", message);

            // TODO Implement logic for sending SMS
        }
    }

    @Override
    public void sendEmail(AlarmChecker checker, int sequenceCount) {

        List<String> receivers = userGroupService.selectEmailOfMember(checker.getuserGroupId());

        if (receivers.size() == 0) {
            return;
        }

        for (String emailId : receivers) {

            /*  这个类主要是设置邮件  
             *  mailServerHost:邮箱服务器
             *  userName:发送方邮件用户名
             *  password:发送方邮件密码
             *  fromAddress:发送方邮件用户名
             *  toAddress:接收方邮件用户名
             */
            MailSenderInfo mailInfo = new MailSenderInfo();
            mailInfo.setMailServerHost("smtp.21cn.com");
            mailInfo.setMailServerPort("25");
            mailInfo.setValidate(true);
            mailInfo.setUserName("[email protected]");
            mailInfo.setPassword("yourpass");
            mailInfo.setFromAddress("[email protected]");
            mailInfo.setToAddress(emailId);
            mailInfo.setSubject("Pinpoint报警");
            mailInfo.setContent(checker.getEmailMessage());
            // 这个类主要来发送邮件
            SimpleMailSender sms = new SimpleMailSender();
            boolean con = false;

            try {
                con = sms.sendTextMail(mailInfo);// 发送文体格式
            } catch (Exception e) {
                logger.error("=AlarmMessageSenderImple.sendEmail=>错误原因是:" + e.getMessage(),e);
            }
            if (con) {
                logger.info("=AlarmMessageSenderImple.sendEmail=>"+emailId+"发送成功!邮件内容:"+checker.getEmailMessage());
            } else {
                logger.info("=AlarmMessageSenderImple.sendEmail=>"+emailId+"发送失败!邮件内容:"+checker.getEmailMessage());
            }
        }

    }
}

修改AlarmWriter使用自定义报警类

@Autowired(required=false)
    private AlarmMessageSender alarmMessageSender = new AlarmMessageSenderImple();
    
修改batch.enable配置


#batch enable config
batch.enable=true

#batch server ip to execute batch
batch.server.ip=127.0.0.1

3.3配置mysql
修改jdbc.properties配置

#jdbc.properties配置信息
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.2.10:3306/ipinpoint?characterEncoding=UTF-8
jdbc.username=develop
jdbc.password=develop

编辑applicationContext-web.xml文件
在applicationContext-web.xml文件中添加如下代码

<bean id="AlarmMessageSenderImple" class="com.navercorp.pinpoint.web.alarm.AlarmMessageSenderImple">
</bean>

修改web页面,打开用户注册


修改后源码:

<div class="some-list" style="width:300px;margin-left: 15px;">
	<div class="some-list-header" style="background-color:#9A9A9A;color:#FFF;">
		<span class="title">Pinpoint User <span class="total"></span></span>
		<span class="right" style="text-decoration: underline;cursor:pointer" ng-click="onAddPinpointUser()">+ Add</span>
	</div>
	<div class="some-list-search">
		<div class="input-group">
			<input type="text" class="form-control" placeholder="Enter at least 2 letters to search" ng-keydown="onSearchKeydown($event)"/>
			<span class="input-group-btn">
				<button class="btn btn-default" type="button" ng-click="onSearch()">
					<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
				</button>
			</span>
		</div>
	</div>
	<div class="some-list-content" style="color:#9A9A9A;">
		<div class="wrapper _disable-check"><ul>
			<li class="new-group hide-me">
				<input type="text" class="form-control" style="height:25px" placeholder="User Id" ng-keydown="onEditPinpointUserKeydown($event)"/>
			</li>
			<li class="new-group hide-me">
				<input type="text" class="form-control" style="height:25px" placeholder="Name" ng-keydown="onEditPinpointUserKeydown($event)"/>
			</li>
			<li class="new-group hide-me">
				<input type="text" class="form-control" style="height:25px" placeholder="Department" ng-keydown="onEditPinpointUserKeydown($event)"/>
			</li>
			<li class="new-group hide-me">
				<input type="text" class="form-control" style="height:25px" placeholder="Phone" ng-keydown="onEditPinpointUserKeydown($event)"/>
			</li>
			<li class="new-group hide-me">
				<input type="text" class="form-control" style="height:25px" placeholder="Email" ng-keydown="onEditPinpointUserKeydown($event)"/>
				<div style="float:right" class="_add hide-me">
					<span class="glyphicon glyphicon-remove remove" aria-hidden="true" ng-click="onCancelAddPinpointUser()"></span>
					<span class="glyphicon glyphicon-ok edit" aria-hidden="true" ng-click="onApplyAddPinpointUser()"></span>
				</div>
				<div style="float:right" class="_edit hide-me">
					<span class="glyphicon glyphicon-remove remove" aria-hidden="true" ng-click="onCancelUpdatePinpointUser()"></span>
					<span class="glyphicon glyphicon-ok edit-confirm" aria-hidden="true" ng-click="onApplyUpdatePinpointUser()"></span>
				</div>
			</li>
			<li ng-repeat="pinpointUser in pinpointUserList" id="{{prefix + pinpointUser.userId}}">
				<span class="contents" style="margin-left:6px">{{"("+pinpointUser.department + ")" + pinpointUser.name}}</span>
				<input type="checkbox" ng-click="checkUser($event)" ng-model="pinpointUser.has"/>
				<div style="float:right" class="_normal" ng-show="canEditUserInfo">
					<span class="glyphicon glyphicon-remove remove" aria-hidden="true" ng-click="onRemovePinpointUser($event)"></span>
					<span class="glyphicon glyphicon-pencil edit" aria-hidden="true" ng-click="onUpdatePinpointUser($event)"></span>
				</div>
				<div style="float:right" class="_remove hide-me" ng-show="canEditUserInfo">
					<span class="glyphicon glyphicon-remove remove remove-confirm" aria-hidden="true" ng-click="onApplyRemovePinpointUser()"></span>
					<span class="glyphicon glyphicon-arrow-left remove-cancel" aria-hidden="true" ng-click="onCancelRemovePinpointUser()"></span>
				</div>
			</li>
		</ul></div>
	</div>
	<div class="some-loading hide-me">
		<div class="timer-loader"></div>
	</div>
	<div class="some-alert hide-me">
		<span class="message"></span>
		<span class="close-alert" style="color:#FFF;" ng-click="onCloseAlert()">X</span>
	</div>
</div>



4,初始数据库

在mysql中新建一个ipinpoint库在项目resources/sql中找到两个sql文件并在ipinpoint中执行

CreateTableStatement-mysql.sql
SpringBatchJobRepositorySchema-mysql.sql

执行后结果:



5,部署

在web目录下执行 mvn clean package命令,进行打包,拿到pinpoint-web-1.7.1.war之后,按照正常部署方式进行部署。参考博客:

APM监控--(二)Pinpoint部署手册



6,操作

新增用户



新增组


用户与组关联



配置报警


报警类型说明:


SLOW COUNT / 慢请求数
当应用发出的慢请求数量超过配置阈值时触发。

SLOW RATE / 慢请求比例
当应用发出的慢请求百分比超过配置阈值时触发。

ERROR COUNT / 请求失败数
当应用发出的失败请求数量超过配置阈值时触发。

ERROR RATE / 请求失败率
当应用发出的失败请求百分比超过配置阈值时触发。

TOTAL COUNT / 总数量
当应用发出的所有请求数量超过配置阈值时触发。
   
SLOW COUNT TO CALLEE / 被调用的慢请求数量
当发送给应用的慢请求数量超过配置阈值时触发。

SLOW RATE TO CALLEE / 被调用的慢请求比例
当发送给应用的慢请求百分比超过配置阈值时触发。

ERROR COUNT TO CALLEE / 被调用的请求错误数
当发送给应用的请求失败数量超过配置阈值时触发。

ERROR RATE TO CALLEE / 被调用的请求错误率
当发送给应用的请求失败百分比超过配置阈值时触发。

TOTAL COUNT TO CALLEE / 被调用的总数量
当发送给应用的所有请求数量超过配置阈值时触发。

HEAP USAGE RATE / 堆内存使用率
当应用的堆内存使用率超过配置阈值时触发。

JVM CPU USAGE RATE / JVM CPU使用率
当应用的CPU使用率超过配置阈值时触发。


7,问题

虽然pinpoint配置便捷,但是告警功能开发简单,不能丰富的配置,需要二次开发,最坑的是配置的规则80%都是默认的,通过看源码发现,基本都是写死的

以com.navercorp.pinpoint.common.trace.BaseHistogramSchema为例

报警规则源码:


 public static final HistogramSchema FAST_SCHEMA = new BaseHistogramSchema(1, (short) 100, "100ms", (short) 300, "300ms", (short) 500, "500ms", "Slow", "Error", (short) -100, "100ms", (short) -300, "300ms", (short) -500, "500ms", (short) -999, "Slow");
    public static final HistogramSchema NORMAL_SCHEMA = new BaseHistogramSchema(2, (short) 1000, "1s", (short) 3000, "3s", (short) 5000, "5s", "Slow", "Error", (short) -1000, "1s", (short) -3000, "3s", (short) -5000, "5s", (short) -9999, "Slow");




猜你喜欢

转载自blog.csdn.net/xvshu/article/details/79814549