• APM性能监测工具skywalking——k8s从入门到高并发系列教程(十三)


            为了找出响应速度慢,超时失败率高的接口,并定位出性能瓶颈的卡壳所在,我们需要一个apm性能监测工具。php是一个单进程的语言,性能卡壳主要就在于myql、redis、memcache等数据库操作以及curl等微服务调用过程,我们需要一个工具,能够帮助我们系统的看到整个接口的请求——响应过程,找出过程中的耗时点,有针对性的做出优化。skywalking是国产开源的apm性能管理工具,本教程在前面内容的基础上,基于k8s搭建一个自己的skywalking服务端,ui工具以及php的skywalking agent

    mysql

    我们的skywalking使用外部mysql作为数据存储仓库

    mysql存储卷

    1. apiVersion: v1
    2. kind: PersistentVolumeClaim
    3. metadata:
    4. name: mysql-data
    5. namespace: datacenter
    6. spec:
    7. accessModes:
    8. - ReadWriteOnce
    9. resources:
    10. requests:
    11. storage: 2Gi
    12. storageClassName: local-path
    13. volumeMode: Filesystem

    myql deployment中用环境变量指定时区和root密码,root密码来自于k8s配置的密钥

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. k8s.kuboard.cn/layer: db
    6. k8s.kuboard.cn/name: mysql
    7. name: mysql
    8. namespace: datacenter
    9. spec:
    10. selector:
    11. matchLabels:
    12. k8s.kuboard.cn/layer: db
    13. k8s.kuboard.cn/name: mysql
    14. template:
    15. metadata:
    16. labels:
    17. k8s.kuboard.cn/layer: db
    18. k8s.kuboard.cn/name: mysql
    19. spec:
    20. containers:
    21. - env:
    22. - name: TZ
    23. value: Asia/Shanghai
    24. envFrom:
    25. - secretRef:
    26. name: passwords
    27. image: 'mysql:8.0'
    28. name: mysql
    29. ports:
    30. - containerPort: 3306
    31. name: mysql
    32. protocol: TCP
    33. volumeMounts:
    34. - mountPath: /var/lib/mysql
    35. name: volume-3k3ah
    36. volumes:
    37. - name: volume-3k3ah
    38. persistentVolumeClaim:
    39. claimName: mysql-data

    skywalking-oap

    skywalking连接mysql,需要自己下载mysql的jar包放到/skywalking/ext-libs 目录中,我这里使用共享数据卷的方式放入。在环境变量中配置连接方式为mysql以及mysql的连接信息从k8s的密钥中读取,时区设置一下

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. k8s.kuboard.cn/layer: monitor
    6. k8s.kuboard.cn/name: skywalking
    7. name: skywalking
    8. namespace: promethues
    9. spec:
    10. selector:
    11. matchLabels:
    12. k8s.kuboard.cn/layer: monitor
    13. k8s.kuboard.cn/name: skywalking
    14. template:
    15. metadata:
    16. labels:
    17. k8s.kuboard.cn/layer: monitor
    18. k8s.kuboard.cn/name: skywalking
    19. spec:
    20. containers:
    21. - env:
    22. - name: TZ
    23. value: Asia/Shanghai
    24. - name: SW_STORAGE
    25. value: mysql
    26. envFrom:
    27. - secretRef:
    28. name: skywalking-db
    29. image: 'apache/skywalking-oap-server:9.0.0'
    30. name: skywalking
    31. ports:
    32. - containerPort: 12800
    33. name: sky-http
    34. protocol: TCP
    35. - containerPort: 11800
    36. name: sky-grpc
    37. protocol: TCP
    38. volumeMounts:
    39. - mountPath: /skywalking/ext-libs
    40. name: volume-r8etc
    41. volumes:
    42. - name: volume-r8etc
    43. persistentVolumeClaim:
    44. claimName: skywalking-jars

    skywalking-ui

            skywalking-ui是skywalking的界面展示工具,需要连接到skywalking才能使用,环境变量中设置一下时区

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. k8s.kuboard.cn/layer: web
    6. k8s.kuboard.cn/name: skywalking-ui
    7. name: skywalking-ui
    8. namespace: promethues
    9. spec:
    10. selector:
    11. matchLabels:
    12. k8s.kuboard.cn/layer: web
    13. k8s.kuboard.cn/name: skywalking-ui
    14. template:
    15. metadata:
    16. labels:
    17. k8s.kuboard.cn/layer: web
    18. k8s.kuboard.cn/name: skywalking-ui
    19. spec:
    20. containers:
    21. - env:
    22. - name: SW_OAP_ADDRESS
    23. value: 'http://skywalking:12800'
    24. - name: TZ
    25. value: Asia/Shanghai
    26. image: 'apache/skywalking-ui:8.9.0'
    27. name: skywalking-ui
    28. ports:
    29. - containerPort: 8080
    30. name: skywalking-ui
    31. protocol: TCP

    php-agent

    skywalking php客户端的编译需要依赖cargo 和 rust 环境 以及libcurl库

    cargo和rust

    1. export RUSTUP_HOME=/tmp/rustup && \
    2. export CARGO_HOME=/tmp/cargo && \
    3. curl https://sh.rustup.rs -sSf | sh -s -- -y --no-modify-path && \
    4. ln -s $CARGO_HOME/bin/rustup /usr/local/bin/rustup && \
    5. ln -s $CARGO_HOME/bin/rustc /usr/local/bin/rustc && \
    6. ln -s $CARGO_HOME/bin/cargo /usr/local/bin/cargo && \
    7. ln -s $CARGO_HOME/bin/rustfmt /usr/local/bin/rustfmt

    libcurl

    apt install -y libcurl4-openssl-dev

    安装skywalking

    rustup default stable && pecl install skywalking

    skywaling的php配置文件内容如下

    1. extension=skywalking
    2. skywalking.enable = ${PHP_SKYWALKING_ENABLE}
    3. skywalking.service = ${APP_NAME}
    4. skywalking.oap_version = 9.0.0
    5. skywalking.grpc_address = ${PHP_SKYWALKING_SERVER_ADDR}
    6. skywalking.log_level = ${PHP_SKYWALKING_LOG_LEVEL}
    7. skywalking.log_path = ${PHP_SKYWALKING_LOG_FILE}
    8. skywalking.sample_n_per_3_secs = ${PHP_SKYWALKING_SAMPLE_PER_SECS}
    9. skywalking.curl_response_enable = 1

    具体内容从环境变量中读取

    1. apiVersion: v1
    2. data:
    3. PHP_SKYWALKING_ENABLE: 'On'
    4. PHP_SKYWALKING_LOG_FILE: /tmp/skywalking_agent.log
    5. PHP_SKYWALKING_LOG_LEVEL: INFO
    6. PHP_SKYWALKING_SERVER_ADDR: 'skywalking.promethues:11800'
    7. PHP_SKYWALKING_WORKER_THREADS: '1'
    8. PHP_SKYWALKING_SAMPLE_PER_SECS: '3'
    9. kind: ConfigMap
    10. metadata:
    11. name: test-api-env
    12. namespace: test-project1

    skywalking 的 php agent通过 sky的grpc端口 11800 发送链路追踪数据。skywalking连接mysql存储这些数据,skywalking-ui 调用 sky的http端口 12800 查询数据做成报表。

  • 相关阅读:
    物联网通信技术课程作业资料(TPUNB技术)
    golang连接池检查连接失败时如何重试
    redis 键常用命令
    第三天课程 RabbitMQ
    基于Matlab使用激光雷达检测分类跟踪车辆仿真(附源码)
    单例模式你会几种写法?
    无胁科技-TVD每日漏洞情报-2022-11-18
    机器人控制算法简要概述
    神经网络解决非线性问题,非线性回归 神经网络
    【jumpserver升级】docker pulling image报错dial tcp 104.18.124.25:443: i/o timeout
  • 原文地址:https://blog.csdn.net/fanghailiang2016/article/details/126944393