Skip to content

Commit 96d884c

Browse files
authored
Merge pull request #131 from weaveworks/dynamo-limits
Fix up DynamoDB Watcher
2 parents 3dac944 + 3e9db14 commit 96d884c

File tree

2 files changed

+12
-30
lines changed

2 files changed

+12
-30
lines changed

chunk/dynamo_client.go

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ const (
1818
)
1919

2020
type dynamoWatcher struct {
21-
accountMaxCapacity *prometheus.GaugeVec
22-
tableCapacity *prometheus.GaugeVec
21+
tableCapacity *prometheus.GaugeVec
2322

2423
dynamoDB *dynamodb.DynamoDB
2524
tableName string
@@ -49,11 +48,6 @@ func WatchDynamo(dynamoDBURL string, interval time.Duration) (Watcher, error) {
4948

5049
tableName := strings.TrimPrefix(url.Path, "/")
5150
w := &dynamoWatcher{
52-
accountMaxCapacity: prometheus.NewGaugeVec(prometheus.GaugeOpts{
53-
Namespace: "cortex",
54-
Name: "dynamo_account_max_capacity_units",
55-
Help: "Account-wide DynamoDB capacity, measured in DynamoDB capacity units.",
56-
}, []string{"op"}),
5751
tableCapacity: prometheus.NewGaugeVec(prometheus.GaugeOpts{
5852
Namespace: "cortex",
5953
Name: "dynamo_table_capacity_units",
@@ -81,12 +75,7 @@ func (w *dynamoWatcher) updateLoop() {
8175
select {
8276
case <-ticker.C:
8377
log.Debugf("Updating limits from dynamo")
84-
err := w.updateAccountLimits()
85-
if err != nil {
86-
// TODO: Back off if err is throttling related.
87-
log.Warnf("Could not fetch account limits from dynamo: %v", err)
88-
}
89-
err = w.updateTableLimits()
78+
err := w.updateTableLimits()
9079
if err != nil {
9180
log.Warnf("Could not fetch table limits from dynamo: %v", err)
9281
}
@@ -96,16 +85,6 @@ func (w *dynamoWatcher) updateLoop() {
9685
}
9786
}
9887

99-
func (w *dynamoWatcher) updateAccountLimits() error {
100-
limits, err := w.dynamoDB.DescribeLimits(&dynamodb.DescribeLimitsInput{})
101-
if err != nil {
102-
return err
103-
}
104-
w.accountMaxCapacity.WithLabelValues(readLabel).Set(float64(*limits.AccountMaxReadCapacityUnits))
105-
w.accountMaxCapacity.WithLabelValues(writeLabel).Set(float64(*limits.AccountMaxWriteCapacityUnits))
106-
return nil
107-
}
108-
10988
func (w *dynamoWatcher) updateTableLimits() error {
11089
output, err := w.dynamoDB.DescribeTable(&dynamodb.DescribeTableInput{
11190
TableName: &w.tableName,
@@ -121,12 +100,10 @@ func (w *dynamoWatcher) updateTableLimits() error {
121100

122101
// Describe implements prometheus.Collector.
123102
func (w *dynamoWatcher) Describe(ch chan<- *prometheus.Desc) {
124-
w.accountMaxCapacity.Describe(ch)
125103
w.tableCapacity.Describe(ch)
126104
}
127105

128106
// Collect implements prometheus.Collector.
129107
func (w *dynamoWatcher) Collect(ch chan<- prometheus.Metric) {
130-
w.accountMaxCapacity.Collect(ch)
131108
w.tableCapacity.Collect(ch)
132109
}

cmd/cortex/main.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ type cfg struct {
7070
remoteTimeout time.Duration
7171
numTokens int
7272
logSuccess bool
73+
watchDynamo bool
7374

7475
ingesterConfig ingester.Config
7576
distributorConfig distributor.Config
@@ -99,6 +100,7 @@ func main() {
99100
flag.IntVar(&cfg.distributorConfig.MinReadSuccesses, "distributor.min-read-successes", 2, "The minimum number of ingesters from which a read must succeed.")
100101
flag.DurationVar(&cfg.distributorConfig.HeartbeatTimeout, "distributor.heartbeat-timeout", time.Minute, "The heartbeat timeout after which ingesters are skipped for reads/writes.")
101102
flag.BoolVar(&cfg.logSuccess, "log.success", false, "Log successful requests")
103+
flag.BoolVar(&cfg.watchDynamo, "watch-dynamo", false, "Periodically collect DynamoDB provisioned throughput.")
102104
flag.Parse()
103105

104106
chunkStore, err := setupChunkStore(cfg)
@@ -108,12 +110,15 @@ func main() {
108110
if cfg.dynamodbPollInterval < 1*time.Minute {
109111
log.Warnf("Polling DynamoDB more than once a minute. Likely to get throttled: %v", cfg.dynamodbPollInterval)
110112
}
111-
resourceWatcher, err := chunk.WatchDynamo(cfg.dynamodbURL, cfg.dynamodbPollInterval)
112-
if err != nil {
113-
log.Fatalf("Error initializing DynamoDB watcher: %v", err)
113+
114+
if cfg.watchDynamo {
115+
resourceWatcher, err := chunk.WatchDynamo(cfg.dynamodbURL, cfg.dynamodbPollInterval)
116+
if err != nil {
117+
log.Fatalf("Error initializing DynamoDB watcher: %v", err)
118+
}
119+
defer resourceWatcher.Stop()
120+
prometheus.MustRegister(resourceWatcher)
114121
}
115-
defer resourceWatcher.Stop()
116-
prometheus.MustRegister(resourceWatcher)
117122

118123
consul, err := ring.NewConsulClient(cfg.consulHost)
119124
if err != nil {

0 commit comments

Comments
 (0)