Posts
pt-variable-advisor - Analyze MySQL variables and advise on possible problems
pt-variable-advisor 是 Percona Toolkit 內的工具之一,能調用 MySQL/MariaDB 的 SHOW VARIABLES 命令偵測參數值,並根據 Rule 分析給予修正的建議。
使用方式如下:
pt-variable-advisor [OPTIONS] [DSN] 像是:
pt-variable-advisor h=$host,P=$port,u=$user,p=$password Link pt-variable-advisor
read morePosts
Percona Toolkit - Install with HomeBrew
如要在 MAC 上使用 Percona Toolkit,可透過 HomeBrew 進行安裝。
brew install percona-toolkit 安裝後可調用 Percona Toolkit 命令查驗,,確認安裝無誤。
pt-variable-advisor --version
read morePosts
Docker - Stop/remove all containers
Docker 容器開多了沒關,要一次停掉可以用 docker ps 命令查閱所有容器,將容器資訊帶給 docker stop,一次停掉。
docker stop $(docker ps -a -q) docker ps 要一次殺掉可以用 docker ps 命令查閱所有容器,將容器資訊帶給 docker rm,一次殺掉。
docker rm -f $(docker ps -a -q) docker ps -a Link Stop / remove all Docker containers (Example)
read morePosts
Jaeger - Tracing with gRPC service
要使用 Jaeger 追蹤 gRPC service 程式,可先加入 Jaeger 與 OpenTracing.Contrib.Grpc 套件。
... <PackageReference Include="Jaeger" Version="0.3.6" /> <PackageReference Include="OpenTracing.Contrib.Grpc" Version="0.2.0" /> </ItemGroup> ... 修改 Startup.ConfigureServices,加入 Jaeger tracer、註冊 GlobalTracer、設定 gRPC 攔截器。
... services.AddGrpc(options => { var serviceName = AppDomain.CurrentDomain.FriendlyName; var tracer = new Tracer.Builder(serviceName) .WithSampler(new ConstSampler(true)) .Build(); GlobalTracer.Register(tracer); services.AddSingleton<ITracer>(tracer); var interceptors = options.Interceptors; interceptors.Add<ServerTracingInterceptor>(tracer); ... }); ... 實際運行程式。
選取 Service 與 Operator 下去查詢。
可看到找到的 Trace,上半部可看到時間與耗時的分佈,下半部就是簡易的列表,可看出 Trace 名稱、識別碼、是什麼時間點觸發的、耗時多久、有多少 Span。
點選感興趣的 Trace,會進入 Trace 細部資訊頁面,會將 Trace 及其組成的 Span 以圖形的方式呈現,便於找到相對耗時的操作。
read morePosts
Jaeger - Tracing with ASP.NET Core
要使用 Jaeger 追蹤 ASP.NET Core 的程式,可先加入 Jaeger 與 OpenTracing.Contrib.NetCore 套件。
<Project Sdk="Microsoft.NET.Sdk.Web"> ... <ItemGroup> <PackageReference Include="Jaeger" Version="0.3.6" /> <PackageReference Include="OpenTracing.Contrib.NetCore" Version="0.6.2" /> </ItemGroup> ... </Project> 修改 Startup.ConfigureServices 啟用。
... public class Startup { ... public void ConfigureServices(IServiceCollection services) { ... services.AddOpenTracing(); var serviceName = AppDomain.CurrentDomain.FriendlyName; var tracer = new Tracer.Builder(serviceName) .WithSampler(new ConstSampler(true)) .Build(); GlobalTracer.Register(tracer); services.AddSingleton<ITracer>(tracer); ... } ... } ... 到這邊程式 Controller 的 Action 已經會送到 Jaeger 可被 Tracing 了。
若要增加額外的 Tracing 的資訊,可透過 DI 或是 GlobalTracer.
read morePosts
Jaeger - Getting started
要使用 Jaeger,最簡便的做法是直接使用 Docker 去起 jaegertracing/all-in-one 容器。
docker run -d --name jaeger \ -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \ -p 5775:5775/udp \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 14268:14268 \ -p 9411:9411 \ jaegertracing/all-in-one 或是從下載頁下載 Jaeger。
wget https://github.com/jaegertracing/jaeger/releases/download/v1.16.0/jaeger-1.16.0-darwin-amd64.tar.gz 解壓縮。
tar xf jaeger-1.16.0-darwin-amd64.tar.gz 運行 jaeger-all-in-one 啟動 Jaeger 服務。
jaeger-all-in-one --collector.zipkin.http-port=9411 透過瀏覽器訪問 http://localhost:16686 應該就可以看到 Jaeger 的操作界面。
Link Getting Started — Jaeger documentation
read morePosts
Redis - Setup redis cluster
這邊紀錄一下如何不透過 create-cluster 腳本一步一步建立 Redis cluster。
首先安裝 Redis,這邊為了方便筆者是直接使用 Docker 去起 Redis 容器。
docker run -it redis bash 這邊為了測試方便,會讓六個 Redis instance 放在同一個容器。所以這邊筆者建立一個目錄便於後續操作。
mkdir cluster-test cd cluster-test 接著為每個 Redis instance 建立目錄。
mkdir 7000 7001 7002 7003 7004 7005 每個 Redis instance 放置對應的 Redis 設定。
cd 7000 apt-get update && apt-get install vim vim redis.conf 設定檔內記得設定 Redis instance 的 port 號與 cluster。
port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes 調用 redis-server 命令,指定設定檔,啟動 Redis instance。
read morePosts
Redis - Redis cluster with docker and create-cluster script
透過 Docker 去起 Redis cluster,多半網路上的做法都是用多個容器去做,這邊筆者考量測試與開發上的便利性,試著用一個容器搭配 create-cluster 腳本去起 Redis cluster。
為了整合 Docker,create-cluster 腳本筆者做了些調整。只留下本來腳本中的 create 與 start 兩個步驟,將兩個步驟合併,並支援透過環境變數帶入 Host 與 Port,另外因為 Redis 不支援 Domain,所以 Host 帶入後會在容器內解析為 IP 後使用。
#!/bin/bash # Settings HOSTNAME=${HOSTNAME} PORT=${PORT} TIMEOUT=2000 NODES=6 REPLICAS=1 CLUSTER_HOST=$(getent hosts $HOSTNAME | awk '{ print $1 }') # Create & start HOSTS="" ENDPORT=$((PORT+NODES)) CURRENTPORT=$PORT while [ $((CURRENTPORT < ENDPORT)) != "0" ]; do echo "Starting $CURRENTPORT" redis-server --port $CURRENTPORT --cluster-enabled yes --cluster-config-file nodes-${CURRENTPORT}.conf --logfile ${CURRENTPORT}.
read morePosts
jq - Install with HomeBrew
如要在 MAC 上使用 jq,可透過 HomeBrew 進行安裝。
brew install jq 安裝後可試著查驗版本確認安裝無誤。
jq --version
read more