Docker
命令安装运行docker run -it -p 4040:4040 --restart=always pyroscope/pyroscope:latest server
API
上报(只允许某些机器上报: 通过Key
来限制), 容器销毁后不能保存数据docker-compose.yml
来配置version: "3"
services:
pyroscope:
image: "pyroscope/pyroscope:latest"
ports:
- "4040:4040"
command:
- "server"
environment:
## 限制必须使用 API 秘钥上传
- PYROSCOPE_AUTH_INGESTION_ENABLED=true
## 设置账号密码登录后台
- PYROSCOPE_AUTH_INTERNAL_ENABLED=true
volumes:
## 设置数据共享目录
- ./data:/var/lib/pyroscope
docker-compose up -d
, 然后访问127.0.0.1:4040
即可进入登录页面Role
必须选择Agent
才可以上报数据 Go
使用
Go
有两种模式, 拉取模式 类似Prometheus
, 由于是自己个人的项目,我选择使用推送的模式
# make sure you also upgrade pyroscope server to version 0.3.1 or higher
go get github.com/pyroscope-io/client/pyroscope
package main
import "github.com/pyroscope-io/client/pyroscope"
func main() {
pyroscope.Start(pyroscope.Config{
// 项目名字, 只能英文不能中文
ApplicationName: "remeber-dream-api",
// 按实际自己 pyroscope 服务的地址
ServerAddress: "127.0.0.1:4040",
Logger: pyroscope.StandardLogger,
// 如果开启了 PYROSCOPE_AUTH_INGESTION_ENABLED,
// 并且按照以上步骤添加了 Key, 那么把 Key 放到此处即可
AuthToken: "xxxx",
// by default all profilers are enabled,
// but you can select the ones you want to use:
ProfileTypes: []pyroscope.ProfileType{
pyroscope.ProfileCPU,
pyroscope.ProfileAllocObjects,
pyroscope.ProfileAllocSpace,
pyroscope.ProfileInuseObjects,
pyroscope.ProfileInuseSpace,
},
})
// your code goes here
}
PHP
使用php-fpm
运行模式直接开启慢日志即可)
laravel-s
, 所以可以使用
FROM phpswoole/swoole:php7.4
# 修改中国镜像源
RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list && rm -Rf /var/lib/apt/lists/* && apt-get update
# 快速安装 PHP 扩展
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions pcntl redis pdo_mysql gd
WORKDIR /var/www
COPY . .
RUN chmod -R 0777 storage && \
chmod -R 0777 bootstrap/cache && \
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && \
composer install --optimize-autoloader --no-dev && \
php artisan config:cache && \
php artisan route:cache && \
php artisan view:cache && \
php artisan laravels publish --no-interaction
# this copies pyroscope binary from pyroscope image to your image:
COPY --from=pyroscope/pyroscope:latest /usr/bin/pyroscope /usr/bin/pyroscope
## 建议在 docker run --env 注入环境变量
#ENV PYROSCOPE_SERVER_ADDRESS=
#ENV PYROSCOPE_APPLICATION_NAME=
#ENV PYROSCOPE_AUTH_TOKEN=
## docker run -d --cap-add=sys_ptrace --env PYROSCOPE_SERVER_ADDRESS=xx --env PYROSCOPE_APPLICATION_NAME=xx --env PYROSCOPE_AUTH_TOKEN=xx -p 80:5200 --name monday-shop-service monday-shop
CMD ["pyroscope", "exec", "php", "bin/laravels", "start", "--env=product"]
alpine
的镜像, 否则容器启动不起来docker run
注入, 这样子可以不用把秘钥等写在Dockerfile
pyroscope exec
写在要运行的命令前面, 参考https://pyroscope.io/docs/php/Pyroscope
Redis
的存取当中名 | 含义 |
---|---|
cpu | |
inuse_objects | 已分配但尚未释放的对象数量 |
alloc_objects | 已分配的对象总数(不论已释放的对象) |
inuse_space | 已分配但尚未释放的内存数量 |
alloc_space | 分配的内存总量(不管释放了多少内存) |