1. 程式人生 > 實用技巧 >flamescope+s3-fuse 擴充套件動態分析能力

flamescope+s3-fuse 擴充套件動態分析能力

flamescope 是一個比較強大的火焰圖檢視工具,但是預設是基於本地檔案系統的,但是很多時候我們為了方便檢視資訊需要使用共享檔案系統
nfs 是一個不錯的選擇,但是不方便分發,s3 很不錯,靈活而且我們可以靈活的進行perf 檔案的分發,以下程式碼是整合

flamescope+s3-fuseDockerfile 整合

基於官方flamescope dockerfile 修改,因為有多個程序需要執行所以基於supervisord進行管理,實際可以選擇順手的工具

FROM python:3-alpine3.8
ENV MNT_POINT /var/s3
ENV S3_REGION ''
ARG S3FS_VERSION=v1.86
ADD app /app/app
ADD run.py /app
ADD requirements.txt /app
ADD passwd-s3fs /etc/passwd-s3fs
RUN apk add libmagic fuse alpine-sdk automake autoconf libxml2-dev fuse-dev curl-dev git bash && \
 cd /app && \
 pip3 install -r requirements.txt && \
 mkdir /profiles && \
 sed -i -e s/127.0.0.1/0.0.0.0/g -e s~examples~/profiles~g app/config.py && \
 git clone https://github.com/s3fs-fuse/s3fs-fuse.git; \
 cd s3fs-fuse; \
 git checkout tags/${S3FS_VERSION}; \
  ./autogen.sh; \
  ./configure --prefix=/usr; \
 make; \
 make install; \
 make clean; \
 rm -rf /var/cache/apk/*; \
  apk del git automake autoconf;
RUN mkdir -p "$MNT_POINT"
WORKDIR /app
EXPOSE 5000/tcp 9001
RUN chmod 600 /etc/passwd-s3fs
COPY --from=ochinchina/supervisord:latest /usr/local/bin/supervisord /usr/local/bin/supervisord
COPY supervisor.conf /etc/supervisor.conf
CMD ["/usr/local/bin/supervisord"]

整合使用

  • docker-compose 檔案
version: "3"
services:
 minio:
  image: minio/minio
  environment:
   - "MINIO_ACCESS_KEY=minio"
   - "MINIO_SECRET_KEY=minio123"
   - "MINIO_BROWSER=off"
  command: server /data
  ports:
   - "80:9000"
 gateway:
  image: minio/minio
  command: gateway s3 http://minio:9000
  ports:
   - "9000:9000"
  environment:
   - "MINIO_ACCESS_KEY=minio"
   - "MINIO_SECRET_KEY=minio123"
 flamescope-s3-fuse:
   image: dalongrong/flamescope:s3-fuse
   privileged: true
   ports: 
   - "5000:5000"
   - "9001:9001"
   volumes: 
   - "./passwd-s3fs:/etc/passwd-s3fs"
   - "./supervisord.conf:/etc/supervisord.conf"
 app:
  image: dalongrong/s3-fs:1.86
  privileged: true
  environment:
   - "AWS_KEY=minio"
   - "AWS_SECRET_KEY=minio123"
   - "S3_REGION=us-east-1"
   - "S3_URL=http://minio:9000"
   - "S3_BUCKET=apps"
  • supervisord.conf 檔案
[program:flamescope]
command = /usr/local/bin/python /app/run.py
stdout_logfile = flamescope.log, /dev/stdout
[program:s3-fuse]
command = /usr/bin/s3fs apps /profiles -f -o url=http://minio:9000,endpoint=us-east-1,allow_other,use_path_request_style,retries=5,connect_timeout=10
stdout_logfile = s3.log, /dev/stdout
[inet_http_server]
port = :9001
  • 啟動
docker-compose up -d

啟動之後,需要先建立資料桶bucket 同時上傳一個perf 抓取的檔案,同時再啟動flamescope 服務

  • 效果

minio 效果


flamescope 效果

說明

以上是一個簡單的整合使用,實際使用的話我們可以直接s3-fuse 執行在主機上,然後在掛載到容器裡邊,這樣我們就擴充套件了flamescope 的分析能力
可以實現為一個比較通用的平臺了,如果希望減少容器映象的大小,可以基於docker 的multi stage 模式進行處理

參考資料

https://www.cnblogs.com/rongfengliang/p/12655303.html
https://github.com/Netflix/flamescope