Skywalking(6):MySql调用监控

Skywalking(6):MySql调用监控,第1张

1 建立数据库

执行建表语句:

CREATE TABLE `t_user` 
( 
    `id` int(11) NOT NULL AUTO_INCREMENT,
     `name` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8

插入几条数据:

insert into `t_user`(`name`) values ('张三'),('李四'),('王五');

2 Spring Data JDBC访问Mysql

创建一个Spring Boot工程,集成Spring Data JDBC。可以直接使用资源文件中提供的skywalking_mysql.jar 。



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.10.RELEASE
         
    
    com.itcast
    skywalking_mysql
    0.0.1-SNAPSHOT
    skywalking_mysql
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-data-jdbc
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            mysql
            mysql-connector-java
            8.0.17
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


注意:

引入了 spring-boot-starter-data-jdbc ,由于使用了8.X的mysql版本,所以驱动版本固定为8.0.17。

pojo类:

package com.itcast.skywalking_mysql.pojo;

import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;

@Table("t_user")
public class User {
    @Id
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

注意:

添加Table注解,修改表明为t_user。

dao接口:

package com.itcast.skywalking_mysql.dao;

import com.itcast.skywalking_mysql.pojo.User;
import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository {
}

controller:

package com.itcast.skywalking_mysql.controller;

import com.itcast.skywalking_mysql.dao.UserRepository;
import com.itcast.skywalking_mysql.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class MysqlController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/users")
    public List findAll(){
        List result = new ArrayList<>();
        userRepository.findAll().forEach((user) -> {
            result.add(user);
        });

        return result;
    }
}

注意:

由于Spring Data JDBC的findAll方法返回的是一个迭代器,所以需要遍历迭代器将数据进行返回。

启动类:

package com.itcast.skywalking_mysql;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SkywalkingMysqlApplication {

    public static void main(String[] args) {
        SpringApplication.run(SkywalkingMysqlApplication.class, args);
    }

}

application.properties:

spring.datasource.url=jdbc:mysql://192.168.222.131:3306/skywalking
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
server.port=8087

3 部署方式

3.1 将 skywalking_mysql.jar 上传至 /usr/local/skywalking 目录下。

3.2 首先我们复制agent,防止使用的冲突。

cd /usr/local/skywalking/apache-skywalking-apm-bin/ 
cp -r agent agent_mysql 
vi agent_mysql/config/agent.config

修改agent_mysql配置中的应用名为:

# The service name in UI 
agent.service_name=${SW_AGENT_NAME:skywalking_mysql}

3.3 启动skywalking_mysql应用,等待启动成功。

#切换到目录下 
cd /usr/local/skywalking 
#启动spring boot 
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent_mysql/skywalking-agent.jar -jar skywalking_mysql.jar &

3.4 调用接口,接口地址为:http://虚拟机IP地址:8087/users

3.5 此时如果页面显示

那么mysql的调用就成功了。

3.6 打开skywalking查看mysql调用的监控情况。

服务仪表盘:

数据库仪表盘:

点击数据库仪表盘可以看到详细的数据库响应时长、吞吐量、SLA等数据。

拓扑图:

该图中已经表示出了一个调用的链路关系:

User(浏览器) ----> skywalking_mysql ----> localhost:33306

并且在服务的上方标识出了每个服务代表的内容,skywalking_mysql是SpringMvc的服务,而

192.168.222.131:3306是mysql的服务。

追踪:

 

追踪图中显示本次调用耗时5ms,其中spring MVC接口耗时4ms,那么另外的1ms是调用Mysql的耗时。

点击mysql的调用,可以看到详细的sql语句。

 

这样可以很好的定位问题产生的原因,特别是在某些sql语句执行慢的场景下。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/871339.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存