sardine

package module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 16, 2022 License: Apache-2.0 Imports: 24 Imported by: 1

README

sardine

Mackerel plugin metrics aggregator with CloudWatch / Mackerel service.

Usage

Usage of sardine:
  -at-once
        run at once and exit
  -config string
        config file path or URL (file, http, https or s3)
  -debug
        enable debug logging
  -sleep duration
        sleep duration at wake up

Flag values are read from environment variables. For example,

$ SARDINE_AT_ONCE=t SARDINE_CONFIG=config.toml sardine

Configuration

# config.toml

[plugin.metrics.memcached]
command = "mackerel-plugin-memcached --host localhost --port 11211"
dimensions = [
  "ClusterName=mycluster",
  "ClusterName=mycluster,AvailabilityZone=az-a"
] # "Name=Value[,Name=Value...]"
interval = "10s"
timeout  = "5s"

[plugin.metrics.xxxx]
command = "...."

[plugin.check.memcached]
namespace = "memcahed/check" # required
dimensions = ["ClusterName=mycluster"]
command = "memping -s localhost:11211"
$ sardine -config config.toml

AWS credentials for access to CloudWatch are read from environment variables or instance profile.

  • AWS_REGION: required. e.g. ap-northeast-1

How sardine works

sardine works as below.

  1. Execute command for each [plugin.metrics.*] sections.
    • default interval 60 sec.
  2. Put metrics got from command's output to CloudWatch metrics.
    • e.g. memcached.cmd.cmd_get 10.0 1512057958 put as
      • Namespace: memcached/cmd
      • MetricName: cmd_get
      • Value: 10.0
      • Timestamp: 2017-12-01T16:05:58Z
  3. Execute command for each [plugin.check.*] sections.
    • default interval 60 sec.
  4. Put a command's result to CloudWatch metrics.
    • e.g.
      • Namespace: memcached/check
      • MetricName: CheckFailed
      • Value: 1
      • Timestamp: 2017-12-01T16:05:58Z
    • exit status of command maps to CloudWatch metric name as below
      • 0 : CheckOK
      • 1 : CheckFailed
      • 2 : CheckWarning
      • other : CheckUnknown
    • metric Value is always 1

Post metrics to Mackerel service.

sardine also can post metrics to Mackerel service.

[plugin.metrics.memcached]
command     = "mackerel-plugin-memcached --host localhost --port 11211"
destination = "Mackerel"
service     = "MyService"

API key will be load from MACKEREL_APIKEY environment variable.

Author

Fujiwara Shunichiro fujiwara.shunichiro@gmail.com

License

Copyright 2017 Fujiwara Shunichiro

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

nless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Debug                 = false
	DefaultInterval       = time.Minute
	DefaultCommandTimeout = time.Minute
)

Functions

func Run

func Run(ctx context.Context, configPath string) error

func RunAtOnce added in v0.4.0

func RunAtOnce(ctx context.Context, configPath string) error

Types

type CheckPlugin

type CheckPlugin struct {
	ID         string
	Namespace  string
	Command    []string
	Timeout    time.Duration
	Interval   time.Duration
	Dimensions [][]types.Dimension
}

func (*CheckPlugin) Execute

func (cp *CheckPlugin) Execute(ctx context.Context) (CheckResult, error)

func (*CheckPlugin) Run

func (*CheckPlugin) RunAtOnce added in v0.4.0

func (cp *CheckPlugin) RunAtOnce(ctx context.Context, ch chan *cloudwatch.PutMetricDataInput) error

type CheckResult

type CheckResult int
const (
	CheckOK CheckResult = iota
	CheckFailed
	CheckWarning
	CheckUnknown
)

func (CheckResult) NewMetricDatum

func (r CheckResult) NewMetricDatum(ds []types.Dimension, ts time.Time) types.MetricDatum

func (CheckResult) String

func (i CheckResult) String() string

type CloudWatchMetricPlugin added in v0.1.0

type CloudWatchMetricPlugin struct {
	Dimensions [][]types.Dimension
	Ch         chan *cloudwatch.PutMetricDataInput
	// contains filtered or unexported fields
}

func (*CloudWatchMetricPlugin) Command added in v0.1.0

func (mp *CloudWatchMetricPlugin) Command() []string

func (*CloudWatchMetricPlugin) Enqueue added in v0.1.0

func (mp *CloudWatchMetricPlugin) Enqueue(metrics []*Metric)

func (*CloudWatchMetricPlugin) ID added in v0.1.0

func (mp *CloudWatchMetricPlugin) ID() string

func (*CloudWatchMetricPlugin) Interval added in v0.1.0

func (mp *CloudWatchMetricPlugin) Interval() time.Duration

func (*CloudWatchMetricPlugin) ParseMetricLine added in v0.1.0

func (cmp *CloudWatchMetricPlugin) ParseMetricLine(b string) (*Metric, error)

func (*CloudWatchMetricPlugin) Timeout added in v0.1.0

func (mp *CloudWatchMetricPlugin) Timeout() time.Duration

type Config

type Config struct {
	Plugin        map[string]map[string]*PluginConfig
	CheckPlugins  map[string]*CheckPlugin
	MetricPlugins map[string]MetricPlugin
}

func LoadConfig

func LoadConfig(ctx context.Context, path string) (*Config, error)

type Dimension

type Dimension string

func (*Dimension) CloudWatchDimensions

func (d *Dimension) CloudWatchDimensions() ([]types.Dimension, error)

type MackerelMetricPlugin added in v0.1.0

type MackerelMetricPlugin struct {
	Service string
	Ch      chan ServiceMetric
	// contains filtered or unexported fields
}

func (*MackerelMetricPlugin) Command added in v0.1.0

func (mp *MackerelMetricPlugin) Command() []string

func (*MackerelMetricPlugin) Enqueue added in v0.1.0

func (mp *MackerelMetricPlugin) Enqueue(metrics []*Metric)

func (*MackerelMetricPlugin) ID added in v0.1.0

func (mp *MackerelMetricPlugin) ID() string

func (*MackerelMetricPlugin) Interval added in v0.1.0

func (mp *MackerelMetricPlugin) Interval() time.Duration

func (*MackerelMetricPlugin) ParseMetricLine added in v0.1.0

func (mp *MackerelMetricPlugin) ParseMetricLine(b string) (*Metric, error)

func (*MackerelMetricPlugin) Timeout added in v0.1.0

func (mp *MackerelMetricPlugin) Timeout() time.Duration

type Metric

type Metric struct {
	Namespace string
	Name      string
	Value     float64
	Timestamp time.Time
}

func (*Metric) NewMetricDatum

func (m *Metric) NewMetricDatum(ds []types.Dimension) types.MetricDatum

type MetricPlugin

type MetricPlugin interface {
	ID() string
	Command() []string
	Timeout() time.Duration
	Interval() time.Duration
	Enqueue([]*Metric)
	ParseMetricLine(string) (*Metric, error)
}

type PluginConfig

type PluginConfig struct {
	Namespace   string
	Command     string
	Timeout     duration
	Interval    duration
	Dimensions  []*Dimension
	Destination string
	Service     string
}

func (*PluginConfig) NewCheckPlugin

func (pc *PluginConfig) NewCheckPlugin(id string) (*CheckPlugin, error)

func (*PluginConfig) NewCloudWatchMetricPlugin added in v0.1.0

func (pc *PluginConfig) NewCloudWatchMetricPlugin(id string) (*CloudWatchMetricPlugin, error)

func (*PluginConfig) NewMackerelMetricPlugin added in v0.1.0

func (pc *PluginConfig) NewMackerelMetricPlugin(id string) (*MackerelMetricPlugin, error)

type ServiceMetric added in v0.1.0

type ServiceMetric struct {
	Service      string
	MetricValues []*mackerel.MetricValue
}

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL