shimesaba

package module
v0.7.1 Latest Latest
Warning

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

Go to latest
Published: Feb 2, 2022 License: MIT Imports: 24 Imported by: 0

README

Latest GitHub release Github Actions test Go Report Card License

shimesaba

For SRE to operate and monitor services using Mackerel.

Description

shimesaba is a tool for tracking SLO/ErrorBudget using Mackerel as an SLI measurement service.

  1. Get and aggregate Mackerel (host/service) metrics within the calculated period.
  2. Calculate the SLI from the metric obtained in step 1 and determine if it is an SLO violation in the rolling window.
  3. Calculate the time (minutes) of SLO violation within the time frame of the rolling window and calculate the error budget.
  4. Post the calculated error budget, failure time for SLO violation, etc. as Mackerel service metric.

Install

binary packages

Releases.

Homebrew tap
$ brew install mashiike/tap/shimesaba

Usage

as CLI command
$ shimesaba -config config.yaml -mackerel-apikey <Mackerel API Key> 
NAME:
   shimesaba - A commandline tool for tracking SLO/ErrorBudget using Mackerel as an SLI measurement service.

USAGE:
   shimesaba -config <config file> [command options]

VERSION:
   current

COMMANDS:
   dashboard  manage mackerel dashboard for SLI/SLO (deprecated)
   run        run shimesaba. this is main feature (deprecated), use no subcommand
   help, h    Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --backfill value                   generate report before n point (default: 3) [$BACKFILL, $SHIMESABA_BACKFILL]
   --config value, -c value           config file path, can set multiple [$CONFIG, $SHIMESABA_CONFIG]
   --debug                            output debug log (default: false) [$SHIMESABA_DEBUG]
   --dry-run                          report output stdout and not put mackerel (default: false) [$SHIMESABA_DRY_RUN]
   --mackerel-apikey value, -k value  for access mackerel API (default: *********) [$MACKEREL_APIKEY, $SHIMESABA_MACKEREL_APIKEY]
   --help, -h                         show help (default: false)
   --version, -v                      print the version (default: false)
as AWS Lambda function

shimesaba binary also runs as AWS Lambda function. shimesaba implicitly behaves as a run command when run as a bootstrap with a Lambda Function

CLI options can be specified from environment variables. For example, when MACKEREL_APIKEY environment variable is set, the value is set to -mackerel-apikey option.

Example Lambda functions configuration.

{
  "FunctionName": "shimesaba",
  "Environment": {
    "Variables": {
      "SHIMESABA_CONFIG": "config.yaml",
      "MACKEREL_APIKEY": "<Mackerel API KEY>"
    }
  },
  "Handler": "shimesaba",
  "MemorySize": 128,
  "Role": "arn:aws:iam::0123456789012:role/lambda-function",
  "Runtime": "provided.al2",
  "Timeout": 300
}
Configuration file

The following are the settings for the latest v0.7.0.

YAML format.

required_version: ">=0.7.0" # which specifies which versions of shimesaba can be used with your configuration.

# This is a common setting item for error budget calculation.
# It is possible to override the same settings in each SLO definition.
service_name: prod          # - The name of the service to which you want to submit the service metric for error budgeting.
metric_prefix: api          # - Specifies the service metric prefix for error budgeting.
time_frame: 28d             # - Specify the size of the rolling window to calculate the error budget.
calculate_interval: 1h      # - Settings related to the interval for calculating the error budget.
error_budget_size: 0.1%     # - This setting is related to the size of the error budget.
                            #   If % is used, it is a ratio to the size of the rolling window.
                            #   It is also possible to specify a time such as 1h or 40m.

# Describes the settings for each SLO. SLOs are treated as monitoring rules.
# The definition of each SLO is determined by ORing the monitoring rules that match the conditions specified in `objectives`.
# That is, based on the alerts corresponding to the monitoring rules that match the conditions, the existence of any of the alerts will be judged as SLO violation.
definitions:
  # In the availability SLO, if an alert occurs for a monitoring rule name that starts with "SLO availability" 
  #  or an external monitoring rule that ends with "api.example.com", it is considered an SLO violation. 
  - id: availability
    objectives: 
      - monitor_name_prefix: "SLO availability"
      - monitor_name_suffix: "api.example.com"
        monitor_type: "external" 
  # In the latency SLO, we consider it an SLO violation if an alert occurs for a host metric monitoring rule with a name starting with "SLO availability".
  - id: latency
    error_budget_size: 200m
    objectives:
      - monitor_name_prefix: "SLO latency"
      - monitor_type: "host"

definitions takes a list of constituent SLI/SLO definitions.
6 Mackerel service metrics will be listed per definition.

For example, if id is latency in the above configuration, the following service metric will be posted.

  • api.error_budget.latency: Current error budget remaining number (unit:minutes)
  • api.error_budget_percentage.latency: percentage of current error budget remaining. If it exceeds 100%, the error budget is used up.
  • api.error_budget_consumption.latency: Error budget newly consumed in this calculation window (unit:minutes)
  • api.error_budget_consumption_percentage.latency: Percentage of newly consumed error budget in this calculation window
  • api.failure_time.latency: Time of SLO violation within the rolling window time frame (unit:minutes)
  • api.uptime.latency: Time that can be treated as normal operation within the time frame of the rolling window (unit:minutes)
Manual correction feature

If you enter downtime:3m or similar in the reason for closing an alert, the alert will be calculated as if the SLO had been violated for 3 minutes from the time it was opened.

The description "3m" can be any time like 1h, 40m, 1h50m, etc. as well as other settings. When combined with other statements, half-width spaces are required before and after the above keywords.

Environment variable SSMWRAP_PATHS

It incorporates github.com/handlename/ssmwrap for parameter management.
If you specify the path of the Parameter Store of AWS Systems Manager separated by commas, it will be output to the environment variable.
Useful when used as a Lambda function.

Environment variable SHIMESABA_ENABLE_REASSESSMENT

Activate experimental features. This will re-evaluate the SLO based on the current monitoring rules for host metric monitoring and service metric monitoring, going back from 15 minutes before the specified alert period.

This experimental feature is to avoid the problem of the minimum error budget consumption unit of 5 minutes when evaluating monitoring rules every 5 minutes in AWS Integration, etc.

Translated with www.DeepL.com/Translator (free version)

LICENSE

MIT

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrDashboardNotFound = errors.New("dashboard not found")

Functions

func BackfillOption

func BackfillOption(count int) func(*Options)

BackfillOption specifies how many points of data to calculate retroactively from the current time.

func DryRunOption

func DryRunOption(dryRun bool) func(*Options)

DryRunOption is an option to output the calculated error budget as standard without posting it to Mackerel.

Types

type Alert added in v0.6.0

type Alert struct {
	Monitor  *Monitor
	HostID   string
	OpenedAt time.Time
	ClosedAt *time.Time
	Reason   string
	// contains filtered or unexported fields
}

func NewAlert added in v0.6.0

func NewAlert(monitor *Monitor, openedAt time.Time, closedAt *time.Time) *Alert

func (*Alert) CorrectionTime added in v0.7.0

func (alert *Alert) CorrectionTime() (time.Duration, bool)

func (*Alert) EvaluateReliabilities added in v0.7.0

func (alert *Alert) EvaluateReliabilities(timeFrame time.Duration) (Reliabilities, error)

func (*Alert) String added in v0.6.0

func (alert *Alert) String() string

func (*Alert) WithHostID added in v0.7.0

func (alert *Alert) WithHostID(hostID string) *Alert

func (*Alert) WithReason added in v0.7.0

func (alert *Alert) WithReason(reason string) *Alert

type AlertObjective added in v0.6.0

type AlertObjective struct {
	// contains filtered or unexported fields
}

func NewAlertObjective added in v0.6.0

func NewAlertObjective(cfg *AlertObjectiveConfig) *AlertObjective

func (AlertObjective) EvaluateReliabilities added in v0.7.0

func (o AlertObjective) EvaluateReliabilities(timeFrame time.Duration, alerts Alerts, startAt, endAt time.Time) (Reliabilities, error)

func (AlertObjective) MatchMonitor added in v0.6.0

func (o AlertObjective) MatchMonitor(monitor *Monitor) bool

type AlertObjectiveConfig added in v0.6.0

type AlertObjectiveConfig struct {
	MonitorID         string `json:"monitor_id,omitempty" yaml:"monitor_id,omitempty"`
	MonitorNamePrefix string `json:"monitor_name_prefix,omitempty" yaml:"monitor_name_prefix,omitempty"`
	MonitorNameSuffix string `json:"monitor_name_suffix,omitempty" yaml:"monitor_name_suffix,omitempty"`
	MonitorType       string `json:"monitor_type,omitempty" yaml:"monitor_type,omitempty"`
}

func (*AlertObjectiveConfig) Restrict added in v0.6.0

func (c *AlertObjectiveConfig) Restrict() error

Restrict restricts a configuration.

type Alerts added in v0.6.0

type Alerts []*Alert

func (Alerts) EndAt added in v0.6.0

func (alerts Alerts) EndAt() time.Time

func (Alerts) StartAt added in v0.6.0

func (alerts Alerts) StartAt() time.Time

type App

type App struct {
	// contains filtered or unexported fields
}

App manages life cycle

func New

func New(apikey string, cfg *Config) (*App, error)

New creates an app

func NewWithMackerelClient

func NewWithMackerelClient(client MackerelClient, cfg *Config) (*App, error)

NewWithMackerelClient is there to accept mock clients.

func (*App) DashboardBuild added in v0.3.0

func (app *App) DashboardBuild(ctx context.Context, optFns ...func(*Options)) error

func (*App) DashboardInit added in v0.3.0

func (app *App) DashboardInit(ctx context.Context, dashboardIDOrURL string) error

func (*App) Run

func (app *App) Run(ctx context.Context, optFns ...func(*Options)) error

Run performs the calculation of the error bar calculation

type Config

type Config struct {
	RequiredVersion string `yaml:"required_version" json:"required_version"`

	Metrics     MetricConfigs     `yaml:"metrics" json:"metrics"`
	Definitions DefinitionConfigs `yaml:"definitions" json:"definitions"`

	//Common definition parameter
	TimeFrame         string      `yaml:"time_frame" json:"time_frame"`
	ServiceName       string      `json:"service_name" yaml:"service_name"`
	MetricPrefix      string      `json:"metric_prefix" yaml:"metric_prefix"`
	ErrorBudgetSize   interface{} `yaml:"error_budget_size" json:"error_budget_size"`
	CalculateInterval string      `yaml:"calculate_interval" json:"calculate_interval"`

	Dashboard string `json:"dashboard,omitempty" yaml:"dashboard,omitempty"`
	// contains filtered or unexported fields
}

Config for App

func NewDefaultConfig

func NewDefaultConfig() *Config

NewDefaultConfig creates a default configuration.

func (*Config) Load

func (c *Config) Load(paths ...string) error

Load loads configuration file from file paths.

func (*Config) Restrict

func (c *Config) Restrict() error

Restrict restricts a configuration.

func (*Config) ValidateVersion

func (c *Config) ValidateVersion(version string) error

ValidateVersion validates a version satisfies required_version.

type Dashboard added in v0.3.0

type Dashboard = mackerel.Dashboard

Dashboard is alias of mackerel.Dashboard

type Definition

type Definition struct {
	// contains filtered or unexported fields
}

Definition is SLI/SLO Definition

func NewDefinition

func NewDefinition(cfg *DefinitionConfig) (*Definition, error)

NewDefinition creates Definition from DefinitionConfig

func (*Definition) AlertObjectives added in v0.6.0

func (d *Definition) AlertObjectives(monitors []*Monitor) []*Monitor

func (*Definition) CreateReports added in v0.5.0

func (d *Definition) CreateReports(ctx context.Context, metrics Metrics, alerts Alerts, startAt, endAt time.Time) ([]*Report, error)

CreateReports returns Report with Metrics

func (*Definition) ExprObjectives added in v0.6.0

func (d *Definition) ExprObjectives() []string

func (*Definition) ID

func (d *Definition) ID() string

ID returns DefinitionConfig.id

type DefinitionConfig

type DefinitionConfig struct {
	ID                string             `json:"id" yaml:"id"`
	TimeFrame         string             `yaml:"time_frame" json:"time_frame"`
	ServiceName       string             `json:"service_name" yaml:"service_name"`
	MetricPrefix      string             `json:"metric_prefix" yaml:"metric_prefix"`
	MetricSuffix      string             `json:"metric_suffix" yaml:"metric_suffix"`
	ErrorBudgetSize   interface{}        `yaml:"error_budget_size" json:"error_budget_size"`
	CalculateInterval string             `yaml:"calculate_interval" json:"calculate_interval"`
	Objectives        []*ObjectiveConfig `json:"objectives" yaml:"objectives"`
	// contains filtered or unexported fields
}

DefinitionConfig is a setting related to SLI/SLO

func (*DefinitionConfig) DurationCalculate

func (c *DefinitionConfig) DurationCalculate() time.Duration

DurationCalculate converts CalculateInterval as time.Duration

func (*DefinitionConfig) DurationTimeFrame

func (c *DefinitionConfig) DurationTimeFrame() time.Duration

DurationTimeFrame converts TimeFrame as time.Duration

func (*DefinitionConfig) ErrorBudgetSizeParcentage added in v0.6.0

func (c *DefinitionConfig) ErrorBudgetSizeParcentage() float64

func (*DefinitionConfig) MergeInto

func (c *DefinitionConfig) MergeInto(o *DefinitionConfig)

MergeInto merges DefinitionConfig together

func (*DefinitionConfig) Restrict

func (c *DefinitionConfig) Restrict() error

Restrict restricts a definition configuration.

func (*DefinitionConfig) StartAt added in v0.6.0

func (c *DefinitionConfig) StartAt(now time.Time, backfill int) time.Time

type DefinitionConfigs

type DefinitionConfigs map[string]*DefinitionConfig

DefinitionConfigs is a collection of DefinitionConfigs that corrects the uniqueness of IDs.

func (DefinitionConfigs) MarshalYAML

func (c DefinitionConfigs) MarshalYAML() (interface{}, error)

MarshalYAML implements yaml.Marshaller

func (DefinitionConfigs) Restrict

func (c DefinitionConfigs) Restrict() error

Restrict restricts a definition configuration.

func (DefinitionConfigs) StartAt added in v0.6.0

func (c DefinitionConfigs) StartAt(now time.Time, backfill int) time.Time

func (DefinitionConfigs) String

func (c DefinitionConfigs) String() string

String implements fmt.Stringer

func (DefinitionConfigs) ToSlice

func (c DefinitionConfigs) ToSlice() []*DefinitionConfig

func (*DefinitionConfigs) UnmarshalYAML

func (c *DefinitionConfigs) UnmarshalYAML(unmarshal func(interface{}) error) error

MarshalYAML implements yaml.Unmarshaler

type Destination added in v0.6.0

type Destination struct {
	ServiceName  string
	MetricPrefix string
	MetricSuffix string
}

func (*Destination) ErrorBudgetConsumptionMetricName added in v0.6.0

func (d *Destination) ErrorBudgetConsumptionMetricName() string

func (*Destination) ErrorBudgetConsumptionPercentageMetricName added in v0.6.0

func (d *Destination) ErrorBudgetConsumptionPercentageMetricName() string

func (*Destination) ErrorBudgetMetricName added in v0.6.0

func (d *Destination) ErrorBudgetMetricName() string

func (*Destination) ErrorBudgetPercentageMetricName added in v0.6.0

func (d *Destination) ErrorBudgetPercentageMetricName() string

func (*Destination) FailureMetricName added in v0.6.0

func (d *Destination) FailureMetricName() string

func (*Destination) UpTimeMetricName added in v0.6.0

func (d *Destination) UpTimeMetricName() string

type DryRunMackerelClient added in v0.6.1

type DryRunMackerelClient struct {
	MackerelClient
}

func (DryRunMackerelClient) CreateDashboard added in v0.6.1

func (c DryRunMackerelClient) CreateDashboard(param *mackerel.Dashboard) (*mackerel.Dashboard, error)

func (DryRunMackerelClient) PostServiceMetricValues added in v0.6.1

func (c DryRunMackerelClient) PostServiceMetricValues(serviceName string, metricValues []*mackerel.MetricValue) error

func (DryRunMackerelClient) UpdateDashboard added in v0.6.1

func (c DryRunMackerelClient) UpdateDashboard(dashboardID string, param *mackerel.Dashboard) (*mackerel.Dashboard, error)

type ExprObjective added in v0.6.0

type ExprObjective struct {
	// contains filtered or unexported fields
}

func NewExprObjective added in v0.6.0

func NewExprObjective(expr evaluator.Comparator) *ExprObjective

func (*ExprObjective) EvaluateReliabilities added in v0.7.0

func (o *ExprObjective) EvaluateReliabilities(timeFrame time.Duration, metrics Metrics, startAt, endAt time.Time) (Reliabilities, error)

func (*ExprObjective) String added in v0.6.0

func (o *ExprObjective) String() string

type IsNoViolationCollection added in v0.6.0

type IsNoViolationCollection map[time.Time]bool

func (IsNoViolationCollection) IsUp added in v0.6.0

func (IsNoViolationCollection) NewReliabilities added in v0.7.0

func (c IsNoViolationCollection) NewReliabilities(timeFrame time.Duration, startAt, endAt time.Time) (Reliabilities, error)

type MackerelClient

type MackerelClient interface {
	GetOrg() (*mackerel.Org, error)
	FindHosts(param *mackerel.FindHostsParam) ([]*mackerel.Host, error)
	FetchHostMetricValues(hostID string, metricName string, from int64, to int64) ([]mackerel.MetricValue, error)
	FetchServiceMetricValues(serviceName string, metricName string, from int64, to int64) ([]mackerel.MetricValue, error)
	PostServiceMetricValues(serviceName string, metricValues []*mackerel.MetricValue) error

	FindDashboards() ([]*mackerel.Dashboard, error)
	FindDashboard(dashboardID string) (*mackerel.Dashboard, error)
	CreateDashboard(param *mackerel.Dashboard) (*mackerel.Dashboard, error)
	UpdateDashboard(dashboardID string, param *mackerel.Dashboard) (*mackerel.Dashboard, error)

	FindWithClosedAlerts() (*mackerel.AlertsResp, error)
	FindWithClosedAlertsByNextID(nextID string) (*mackerel.AlertsResp, error)
	GetMonitor(monitorID string) (mackerel.Monitor, error)
	FindMonitors() ([]mackerel.Monitor, error)
}

MackerelClient is an abstraction interface for mackerel-client-go.Client

type Metric

type Metric struct {
	// contains filtered or unexported fields
}

Metric handles aggregated Mackerel metrics

func NewMetric

func NewMetric(cfg *MetricConfig) *Metric

func (*Metric) AggregationInterval

func (m *Metric) AggregationInterval() time.Duration

AggregationInterval returns the aggregation interval for metrics

func (*Metric) AppendValue

func (m *Metric) AppendValue(t time.Time, v interface{}) error

AppendValue adds a value to the metric

func (*Metric) EndAt

func (m *Metric) EndAt() time.Time

EndAt returns the end time of the metric

func (*Metric) GetValue

func (m *Metric) GetValue(t time.Time) (float64, bool)

GetValue gets the value at the specified time

func (*Metric) GetValues

func (m *Metric) GetValues(startAt time.Time, endAt time.Time) map[time.Time]float64

GetValues ​​gets the values ​​for the specified time period

func (*Metric) ID

func (m *Metric) ID() string

ID is the identifier of the metric

func (*Metric) Reaggregation added in v0.5.0

func (m *Metric) Reaggregation(aggregateInterval time.Duration) *Metric

Reaggregation

func (*Metric) StartAt

func (m *Metric) StartAt() time.Time

StartAt returns the start time of the metric

func (*Metric) String

func (m *Metric) String() string

String implements fmt.Stringer

type MetricConfig

type MetricConfig struct {
	ID                  string     `yaml:"id,omitempty" json:"id,omitempty"`
	Type                MetricType `yaml:"type,omitempty" json:"type,omitempty"`
	Name                string     `yaml:"name,omitempty" json:"name,omitempty"`
	ServiceName         string     `yaml:"service_name,omitempty" json:"service_name,omitempty"`
	Roles               []string   `yaml:"roles,omitempty" json:"roles,omitempty"`
	HostName            string     `yaml:"host_name,omitempty" json:"host_name,omitempty"`
	AggregationInterval string     `yaml:"aggregation_interval,omitempty" json:"aggregation_interval,omitempty"`
	AggregationMethod   string     `yaml:"aggregation_method,omitempty" json:"aggregation_method,omitempty"`
	InterpolatedValue   *float64   `yaml:"interpolated_value,omitempty" json:"interpolated_value,omitempty"`
	// contains filtered or unexported fields
}

MetricConfig handles metric information obtained from Mackerel

func (*MetricConfig) DurationAggregation added in v0.1.0

func (c *MetricConfig) DurationAggregation() time.Duration

DurationAggregation converts CalculateInterval as time.Duration

func (*MetricConfig) MergeInto

func (c *MetricConfig) MergeInto(o *MetricConfig)

MergeInto merges MetricConfigs together

func (*MetricConfig) Restrict

func (c *MetricConfig) Restrict() error

Restrict restricts a configuration.

func (*MetricConfig) String

func (c *MetricConfig) String() string

String output json

type MetricConfigs

type MetricConfigs map[string]*MetricConfig

MetricConfigs is a collection of MetricConfig

func (MetricConfigs) MarshalYAML

func (c MetricConfigs) MarshalYAML() (interface{}, error)

MarshalYAML controls Yamlization

func (MetricConfigs) Restrict

func (c MetricConfigs) Restrict() error

Restrict restricts a metric configuration.

func (MetricConfigs) String

func (c MetricConfigs) String() string

String implements fmt.Stringer

func (MetricConfigs) ToSlice

func (c MetricConfigs) ToSlice() []*MetricConfig

ToSlice converts the collection to Slice

func (*MetricConfigs) UnmarshalYAML

func (c *MetricConfigs) UnmarshalYAML(unmarshal func(interface{}) error) error

UnmarshalYAML merges duplicate ID MetricConfig

type MetricType

type MetricType int

MetricType is the type of metric in Mackerel

const (
	HostMetric    MetricType = iota + 1 //host
	ServiceMetric                       //service
)

Reserved value

func MetricTypeString

func MetricTypeString(s string) (MetricType, error)

MetricTypeString retrieves an enum value from the enum constants string name. Throws an error if the param is not part of the enum.

func MetricTypeValues

func MetricTypeValues() []MetricType

MetricTypeValues returns all values of the enum

func (MetricType) IsAMetricType

func (i MetricType) IsAMetricType() bool

IsAMetricType returns "true" if the value is listed in the enum definition. "false" otherwise

func (MetricType) MarshalJSON

func (i MetricType) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface for MetricType

func (MetricType) MarshalText

func (i MetricType) MarshalText() ([]byte, error)

MarshalText implements the encoding.TextMarshaler interface for MetricType

func (MetricType) String

func (i MetricType) String() string

func (*MetricType) UnmarshalJSON

func (i *MetricType) UnmarshalJSON(data []byte) error

UnmarshalJSON implements the json.Unmarshaler interface for MetricType

func (*MetricType) UnmarshalText

func (i *MetricType) UnmarshalText(text []byte) error

UnmarshalText implements the encoding.TextUnmarshaler interface for MetricType

type Metrics

type Metrics map[string]*Metric

Metrics is a collection of metrics

func (Metrics) AggregationInterval

func (ms Metrics) AggregationInterval() time.Duration

AggregationInterval returns the longest aggregation period for the metric in the collection

func (Metrics) EndAt

func (ms Metrics) EndAt() time.Time

EndAt returns the latest end time of the metric in the collection

func (Metrics) Get

func (ms Metrics) Get(id string) (*Metric, bool)

Get uses an identifier to get the metric

func (Metrics) GetVariables added in v0.5.0

func (ms Metrics) GetVariables(startAt time.Time, endAt time.Time) map[time.Time]evaluator.Variables

GetVariables ​​gets the Variables ​​for the specified time period

func (Metrics) Set

func (ms Metrics) Set(m *Metric)

Set adds a metric to the collection

func (Metrics) StartAt

func (ms Metrics) StartAt() time.Time

StartAt returns the earliest start time in the metric in the collection

func (Metrics) String

func (ms Metrics) String() string

ToSlice converts the collection to Slice

func (Metrics) ToSlice

func (ms Metrics) ToSlice() []*Metric

type Monitor added in v0.6.0

type Monitor struct {
	// contains filtered or unexported fields
}

func NewMonitor added in v0.7.0

func NewMonitor(id, name, monitorType string) *Monitor

func (*Monitor) EvaluateReliabilities added in v0.7.0

func (m *Monitor) EvaluateReliabilities(hostID string, timeFrame time.Duration, startAt, endAt time.Time) (Reliabilities, bool)

func (*Monitor) ID added in v0.6.0

func (m *Monitor) ID() string

func (*Monitor) Name added in v0.6.0

func (m *Monitor) Name() string

func (*Monitor) String added in v0.6.0

func (m *Monitor) String() string

func (*Monitor) Type added in v0.6.0

func (m *Monitor) Type() string

func (*Monitor) WithEvaluator added in v0.7.0

func (m *Monitor) WithEvaluator(evaluator func(hostID string, timeFrame time.Duration, startAt, endAt time.Time) (Reliabilities, bool)) *Monitor

type ObjectiveConfig

type ObjectiveConfig struct {
	Expr                 string                `yaml:"expr" json:"expr"`
	Alert                *AlertObjectiveConfig `yaml:"alert" json:"alert"`
	AlertObjectiveConfig `yaml:",inline"`
	// contains filtered or unexported fields
}

Objective Config is a SLO setting

func (*ObjectiveConfig) GetComparator added in v0.2.3

func (c *ObjectiveConfig) GetComparator() evaluator.Comparator

GetComparator returns a Comparator generated from ObjectiveConfig

func (*ObjectiveConfig) Restrict

func (c *ObjectiveConfig) Restrict() error

Restrict restricts a configuration.

func (*ObjectiveConfig) Type added in v0.6.0

func (c *ObjectiveConfig) Type() string

Type returns objective type string

type Options added in v0.3.0

type Options struct {
	// contains filtered or unexported fields
}

type Reliabilities added in v0.7.0

type Reliabilities []*Reliability

Reliabilities is sortable

func NewReliabilities added in v0.7.0

func NewReliabilities(s []*Reliability) (Reliabilities, error)

func (Reliabilities) CalcTime added in v0.7.0

func (c Reliabilities) CalcTime(cursor, n int) (upTime, failureTime, deltaFailureTime time.Duration)

func (Reliabilities) Clone added in v0.7.0

func (c Reliabilities) Clone() Reliabilities

func (Reliabilities) CursorAt added in v0.7.0

func (c Reliabilities) CursorAt(i int) time.Time

CursorAt is a representative value of the time shown by the tumbling window

func (Reliabilities) Len added in v0.7.0

func (c Reliabilities) Len() int

func (Reliabilities) Less added in v0.7.0

func (c Reliabilities) Less(i, j int) bool

func (Reliabilities) Merge added in v0.7.0

func (c Reliabilities) Merge(other Reliabilities) (Reliabilities, error)

Merge two collection

func (Reliabilities) MergeInRange added in v0.7.0

func (c Reliabilities) MergeInRange(other Reliabilities, startAt, endAt time.Time) (Reliabilities, error)

func (Reliabilities) Swap added in v0.7.0

func (c Reliabilities) Swap(i, j int)

func (Reliabilities) TimeFrame added in v0.7.0

func (c Reliabilities) TimeFrame() time.Duration

TimeFrame is the size of the tumbling window

type Reliability added in v0.6.0

type Reliability struct {
	// contains filtered or unexported fields
}

Reliability represents a group of values related to reliability per tumbling window.

func NewReliability added in v0.6.0

func NewReliability(cursorAt time.Time, timeFrame time.Duration, isNoViolation IsNoViolationCollection) *Reliability

func (*Reliability) Clone added in v0.6.0

func (r *Reliability) Clone() *Reliability

func (*Reliability) CursorAt added in v0.6.0

func (r *Reliability) CursorAt() time.Time

CursorAt is a representative value of the time shown by the tumbling window

func (*Reliability) FailureTime added in v0.6.0

func (r *Reliability) FailureTime() time.Duration

FailureTime is the time when reliability could not be ensured, i.e. SLO was violated

func (*Reliability) Merge added in v0.6.0

func (r *Reliability) Merge(other *Reliability) (*Reliability, error)

Merge must be the same tumbling window

func (*Reliability) TimeFrame added in v0.6.0

func (r *Reliability) TimeFrame() time.Duration

TimeFrame is the size of the tumbling window

func (*Reliability) TimeFrameEndAt added in v0.6.0

func (r *Reliability) TimeFrameEndAt() time.Time

TimeFrameEndAt is the end time of the tumbling window

func (*Reliability) TimeFrameStartAt added in v0.6.0

func (r *Reliability) TimeFrameStartAt() time.Time

TimeFrameStartAt is the start time of the tumbling window

func (*Reliability) UpTime added in v0.6.0

func (r *Reliability) UpTime() time.Duration

UpTime is the uptime that can guarantee reliability.

type Report

type Report struct {
	DefinitionID           string
	Destination            *Destination
	DataPoint              time.Time
	TimeFrameStartAt       time.Time
	TimeFrameEndAt         time.Time
	UpTime                 time.Duration
	FailureTime            time.Duration
	ErrorBudgetSize        time.Duration
	ErrorBudget            time.Duration
	ErrorBudgetConsumption time.Duration
}

Report has SLI/SLO/ErrorBudget numbers in one rolling window

func NewReport added in v0.6.0

func NewReport(definitionID string, destination *Destination, cursorAt time.Time, timeFrame time.Duration, errorBudgetSize float64) *Report

func NewReports added in v0.6.0

func NewReports(definitionID string, destination *Destination, errorBudgetSize float64, timeFrame time.Duration, reliability Reliabilities) []*Report

func (*Report) ErrorBudgetConsumptionRate

func (r *Report) ErrorBudgetConsumptionRate() float64

ErrorBudgetConsumptionRate returns ErrorBudgetConsumption/ErrorBudgetSize

func (*Report) ErrorBudgetUsageRate

func (r *Report) ErrorBudgetUsageRate() float64

ErrorBudgetUsageRate returns (1.0 - ErrorBudget/ErrorBudgetSize)

func (*Report) MarshalJSON

func (r *Report) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler

func (*Report) SetTime added in v0.6.0

func (r *Report) SetTime(upTime time.Duration, failureTime time.Duration, deltaFailureTime time.Duration)

func (*Report) String

func (r *Report) String() string

String implements fmt.Stringer

type Repository

type Repository struct {
	// contains filtered or unexported fields
}

Repository handles reading and writing data

func NewRepository

func NewRepository(client MackerelClient) *Repository

NewRepository creates Repository

func (*Repository) FetchAlerts added in v0.6.0

func (repo *Repository) FetchAlerts(ctx context.Context, startAt time.Time, endAt time.Time) (Alerts, error)

FetchAlerts retrieves alerts for a specified period of time

func (*Repository) FetchMetric

func (repo *Repository) FetchMetric(ctx context.Context, cfg *MetricConfig, startAt time.Time, endAt time.Time) (*Metric, error)

FetchMetric gets Metric using MetricConfig

func (*Repository) FetchMetrics

func (repo *Repository) FetchMetrics(ctx context.Context, cfgs MetricConfigs, startAt time.Time, endAt time.Time) (Metrics, error)

FetchMetrics gets metrics togethers

func (*Repository) FindDashboard added in v0.3.0

func (repo *Repository) FindDashboard(dashboardIDOrURL string) (*Dashboard, error)

FindDashboard get Mackerel Dashboard

func (*Repository) FindDashboardID added in v0.3.0

func (repo *Repository) FindDashboardID(dashboardIDOrURL string) (string, error)

FindDashboardID get Mackerel Dashboard ID from url or id

func (*Repository) FindMonitors added in v0.6.0

func (repo *Repository) FindMonitors() ([]*Monitor, error)

func (*Repository) GetOrgName added in v0.7.0

func (repo *Repository) GetOrgName(ctx context.Context) (string, error)

func (*Repository) SaveDashboard added in v0.3.0

func (repo *Repository) SaveDashboard(ctx context.Context, dashboard *Dashboard) error

SaveDashboard post Mackerel Dashboard

func (*Repository) SaveReports

func (repo *Repository) SaveReports(ctx context.Context, reports []*Report) error

SaveReports posts Reports to Mackerel

func (*Repository) WithDryRun added in v0.6.1

func (repo *Repository) WithDryRun() *Repository

Directories

Path Synopsis
cmd
internal

Jump to

Keyboard shortcuts

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