[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EGCH48QST0TMM81VCASZKZ":3,"skill-same:01M6EGCH48QST0TMM81VCASZKZ":51},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":25,"repositoryHtmlUrl":26,"repositoryHomepageUrl":27,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M6EGCH48QST0TMM81VCASZKZ","thanos",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fthanos\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# Thanos\n\n## Overview\n\nDeploy Thanos to extend Prometheus with unlimited metric retention via object storage, global query view across multiple Prometheus instances, and automated downsampling. Covers sidecar, store, query, compactor, and ruler components.\n\n## Instructions\n\n### Task A: Thanos Sidecar with Prometheus\n\n```yaml\n# docker-compose.yml — Prometheus with Thanos sidecar uploading to S3\nservices:\n  prometheus:\n    image: prom\u002Fprometheus:v2.49.0\n    command:\n      - '--config.file=\u002Fetc\u002Fprometheus\u002Fprometheus.yml'\n      - '--storage.tsdb.path=\u002Fprometheus'\n      - '--storage.tsdb.min-block-duration=2h'\n      - '--storage.tsdb.max-block-duration=2h'\n      - '--web.enable-lifecycle'\n    volumes:\n      - .\u002Fprometheus.yml:\u002Fetc\u002Fprometheus\u002Fprometheus.yml:ro\n      - prom_data:\u002Fprometheus\n    ports:\n      - \"9090:9090\"\n\n  thanos-sidecar:\n    image: thanosio\u002Fthanos:v0.34.0\n    command:\n      - 'sidecar'\n      - '--tsdb.path=\u002Fprometheus'\n      - '--prometheus.url=http:\u002F\u002Fprometheus:9090'\n      - '--objstore.config-file=\u002Fetc\u002Fthanos\u002Fbucket.yml'\n      - '--grpc-address=0.0.0.0:10901'\n      - '--http-address=0.0.0.0:10902'\n    volumes:\n      - prom_data:\u002Fprometheus:ro\n      - .\u002Fbucket.yml:\u002Fetc\u002Fthanos\u002Fbucket.yml:ro\n\nvolumes:\n  prom_data:\n```\n\n```yaml\n# bucket.yml — Object storage configuration (S3)\ntype: S3\nconfig:\n  bucket: \"thanos-metrics-production\"\n  endpoint: \"s3.us-east-1.amazonaws.com\"\n  region: \"us-east-1\"\n  access_key: \"${AWS_ACCESS_KEY_ID}\"\n  secret_key: \"${AWS_SECRET_ACCESS_KEY}\"\n  insecure: false\n```\n\n```yaml\n# bucket.yml — GCS configuration alternative\ntype: GCS\nconfig:\n  bucket: \"thanos-metrics-production\"\n  service_account: \"\u002Fetc\u002Fthanos\u002Fgcs-sa.json\"\n```\n\n### Task B: Thanos Query (Global View)\n\n```yaml\n# docker-compose-query.yml — Thanos Query for global metric view\nservices:\n  thanos-query:\n    image: thanosio\u002Fthanos:v0.34.0\n    command:\n      - 'query'\n      - '--http-address=0.0.0.0:9090'\n      - '--grpc-address=0.0.0.0:10901'\n      - '--store=thanos-sidecar-cluster-a:10901'\n      - '--store=thanos-sidecar-cluster-b:10901'\n      - '--store=thanos-store-gateway:10901'\n      - '--store=thanos-ruler:10901'\n      - '--query.replica-label=replica'\n      - '--query.replica-label=prometheus_replica'\n      - '--query.auto-downsampling'\n    ports:\n      - \"9090:9090\"\n```\n\n```bash\n# Query across all clusters via Thanos Query API\ncurl -s \"http:\u002F\u002Fthanos-query:9090\u002Fapi\u002Fv1\u002Fquery\" \\\n  --data-urlencode 'query=sum(rate(http_requests_total[5m])) by (cluster, service)' \\\n  --data-urlencode 'dedup=true' | \\\n  jq '.data.result[] | {cluster: .metric.cluster, service: .metric.service, rate: .value[1]}'\n```\n\n### Task C: Thanos Store Gateway\n\n```yaml\n# docker-compose-store.yml — Store gateway for querying object storage\nservices:\n  thanos-store:\n    image: thanosio\u002Fthanos:v0.34.0\n    command:\n      - 'store'\n      - '--objstore.config-file=\u002Fetc\u002Fthanos\u002Fbucket.yml'\n      - '--data-dir=\u002Fthanos\u002Fstore'\n      - '--grpc-address=0.0.0.0:10901'\n      - '--http-address=0.0.0.0:10902'\n      - '--index-cache-size=1GB'\n      - '--chunk-pool-size=2GB'\n      - '--max-time=-2h'\n    volumes:\n      - .\u002Fbucket.yml:\u002Fetc\u002Fthanos\u002Fbucket.yml:ro\n      - store_cache:\u002Fthanos\u002Fstore\n\nvolumes:\n  store_cache:\n```\n\n### Task D: Thanos Compactor\n\n```yaml\n# docker-compose-compactor.yml — Compactor for downsampling and retention\nservices:\n  thanos-compactor:\n    image: thanosio\u002Fthanos:v0.34.0\n    command:\n      - 'compact'\n      - '--objstore.config-file=\u002Fetc\u002Fthanos\u002Fbucket.yml'\n      - '--data-dir=\u002Fthanos\u002Fcompact'\n      - '--http-address=0.0.0.0:10902'\n      - '--retention.resolution-raw=30d'\n      - '--retention.resolution-5m=90d'\n      - '--retention.resolution-1h=365d'\n      - '--compact.concurrency=2'\n      - '--downsample.concurrency=2'\n      - '--wait'\n      - '--wait-interval=5m'\n    volumes:\n      - .\u002Fbucket.yml:\u002Fetc\u002Fthanos\u002Fbucket.yml:ro\n      - compact_data:\u002Fthanos\u002Fcompact\n\nvolumes:\n  compact_data:\n```\n\n### Task E: Thanos Ruler\n\n```yaml\n# docker-compose-ruler.yml — Ruler for recording and alerting rules\nservices:\n  thanos-ruler:\n    image: thanosio\u002Fthanos:v0.34.0\n    command:\n      - 'rule'\n      - '--objstore.config-file=\u002Fetc\u002Fthanos\u002Fbucket.yml'\n      - '--data-dir=\u002Fthanos\u002Fruler'\n      - '--rule-file=\u002Fetc\u002Fthanos\u002Frules\u002F*.yml'\n      - '--query=thanos-query:9090'\n      - '--alertmanagers.url=http:\u002F\u002Falertmanager:9093'\n      - '--grpc-address=0.0.0.0:10901'\n      - '--http-address=0.0.0.0:10902'\n      - '--label=ruler_cluster=\"global\"'\n    volumes:\n      - .\u002Fbucket.yml:\u002Fetc\u002Fthanos\u002Fbucket.yml:ro\n      - .\u002Frules:\u002Fetc\u002Fthanos\u002Frules:ro\n```\n\n```yaml\n# rules\u002Fglobal-alerts.yml — Global alert rules evaluated by Thanos Ruler\ngroups:\n  - name: global-service-health\n    rules:\n      - alert: GlobalHighErrorRate\n        expr: |\n          sum(rate(http_requests_total{status=~\"5..\"}[5m])) by (service)\n          \u002F sum(rate(http_requests_total[5m])) by (service) > 0.05\n        for: 10m\n        labels:\n          severity: critical\n          scope: global\n        annotations:\n          summary: \"Global error rate above 5% for {{ $labels.service }} across all clusters\"\n\n      - record: global:request_rate:5m\n        expr: sum(rate(http_requests_total[5m])) by (service, cluster)\n```\n\n### Task F: Kubernetes Deployment\n\n```yaml\n# thanos-sidecar-container.yml — Add Thanos sidecar to Prometheus StatefulSet\ncontainers:\n  - name: thanos-sidecar\n    image: thanosio\u002Fthanos:v0.34.0\n    args:\n      - sidecar\n      - --tsdb.path=\u002Fprometheus\n      - --prometheus.url=http:\u002F\u002Flocalhost:9090\n      - --objstore.config=$(OBJSTORE_CONFIG)\n    env:\n      - name: OBJSTORE_CONFIG\n        valueFrom:\n          secretKeyRef:\n            name: thanos-objstore-config\n            key: bucket.yml\n    ports:\n      - name: grpc\n        containerPort: 10901\n      - name: http\n        containerPort: 10902\n    volumeMounts:\n      - name: prometheus-data\n        mountPath: \u002Fprometheus\n```\n\n## Best Practices\n\n- Set Prometheus `--storage.tsdb.min-block-duration=2h` and `max-block-duration=2h` for Thanos sidecar compatibility\n- Use `--query.replica-label` to deduplicate metrics from HA Prometheus pairs\n- Run exactly one compactor instance per object storage bucket to avoid data corruption\n- Configure retention per resolution: keep raw data shorter, downsampled longer\n- Use store gateway's `--max-time` flag to avoid overlap with sidecar's recent data\n- Enable `--query.auto-downsampling` on Thanos Query for automatic resolution selection\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fthanos",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill thanos",{"tool":37,"command":38},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill thanos",{"tool":40,"command":41},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill thanos","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fthanos\u002FSKILL.md",true,[45],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"plan-document-reviewer-prompt.md","REFERENCE","参考文档",1713,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Fwriting-plans\u002Fplan-document-reviewer-prompt.md",[52,66,76,85,91,98],{"skillNo":53,"name":54,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":55,"categories":56,"keywords":62,"publishedAt":18},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[57],{"categoryNo":58,"categoryName":59,"taxonomyType":60,"taxonomyTypeDesc":61},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[63,64,65],"model","model hierarchy","model hierarchy skill",{"skillNo":67,"name":68,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":72,"publishedAt":18},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[71],{"categoryNo":58,"categoryName":59,"taxonomyType":60,"taxonomyTypeDesc":61},[73,74,75],"MCP","zoom","zoom mcp",{"skillNo":77,"name":78,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":18},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[82,83,84,74],"sdk","zoom apps sdk","apps",{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":18},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[87],{"skillNo":92,"name":93,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":97,"publishedAt":18},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[96],{"categoryNo":58,"categoryName":59,"taxonomyType":60,"taxonomyTypeDesc":61},[93],{"skillNo":99,"name":100,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":18},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[100]]