🕵️ inspector is a simple tool to compare HTTP Content between 2 origin.
It's originally designed for our web cache proxy hitori.
Feel free to use it for other purposes.
git clone https://github.com/bocchi-the-cache/inspector.git
cd inspector
make buildBinary file and default config file will be generated in dist/inspector-VERSION/inspector
A default config file in dist/inspector-VERSION/config/config.yaml
http:
listen_port: 4399
host:
baseline:
"127.0.0.1:9090"
test:
"127.0.0.1:8080"
storage:
base_case_path:
"bad_case"Change baseline and test address to your own server address.
If http content is different, the content will be saved in bad_case directory.
./dist/inspector-VERSION/inspectorThere several check status between baseline and test http content. The checking order is also same as below.
FETCH_ERROR: eitherbaselineortestcan't be fetched.STATUS_NOT_MATCH: http status code is different.EMPTY_CONTENT: eitherbaselineortesthttp body is empty.STATUS_NOT_200/206_SKIP: http status code is same, but not 200/206.CONTENT_NOT_MATCH: http body is different.PASS: http body is same.
log/log.txt logs inspector's running status.
log/result.txt logs the result of compare.
Bad body content will be saved in bad_case directory.
Metrics are exposed on /metrics endpoint.
You can use Prometheus/Grafana to monitor inspector and results.
var (
RequestReceiveTotalCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "bocchi_inspector_request_receive_total",
Help: "total number of requests received",
}, []string{"node", "method", "host"})
RequestSendTotalCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "bocchi_inspector_request_send_total",
Help: "total number of requests sent",
}, []string{"node", "method", "host", "dst", "status"})
ResultTotalCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "bocchi_inspector_result_total",
Help: "result of http content checking",
}, []string{"node", "method", "status"})
ErrorTotalCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "bocchi_inspector_error_total",
Help: "error of inspector",
}, []string{"node", "method", "process", "error"})
ElapsedMonitor = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "RequestTimeConsumingStatistics",
Help: "api request elapsed time histogram",
Buckets: []float64{0.1, 0.5, 1, 5, 10, 20, 50, 100, 500, 1000, 5000},
}, []string{"node", "process"})
)A possible practice is to use inspector to monitor web cache.

