Changed setting to be an alerting setting

pull/13401/head
Torkel Ödegaard 7 years ago
parent 4dab595ed7
commit cb96c6d942
  1. 6
      conf/defaults.ini
  2. 6
      conf/sample.ini
  3. 8
      docs/sources/installation/configuration.md
  4. 1
      pkg/api/render.go
  5. 3
      pkg/services/alerting/notifier.go
  6. 2
      pkg/services/rendering/interface.go
  7. 10
      pkg/services/rendering/rendering.go
  8. 5
      pkg/setting/setting.go

@ -474,6 +474,10 @@ error_or_timeout = alerting
# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok) # Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
nodata_or_nullvalues = no_data nodata_or_nullvalues = no_data
# Alert notifications can include images, but rendering many images at the same time can overload the server
# This limit will protect the server from render overloading and make sure notifications are sent out quickly
concurrent_render_limit = 5
#################################### Explore ############################# #################################### Explore #############################
[explore] [explore]
# Enable the Explore section # Enable the Explore section
@ -550,5 +554,3 @@ container_name =
# Options to configure external image rendering server like https://github.com/grafana/grafana-image-renderer # Options to configure external image rendering server like https://github.com/grafana/grafana-image-renderer
server_url = server_url =
callback_url = callback_url =
concurrent_limit = 10
concurrent_limit_alerting = 5

@ -393,6 +393,10 @@ log_queries =
# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok) # Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
;nodata_or_nullvalues = no_data ;nodata_or_nullvalues = no_data
# Alert notifications can include images, but rendering many images at the same time can overload the server
# This limit will protect the server from render overloading and make sure notifications are sent out quickly
;concurrent_render_limit = 5
#################################### Explore ############################# #################################### Explore #############################
[explore] [explore]
# Enable the Explore section # Enable the Explore section
@ -471,5 +475,3 @@ log_queries =
# Options to configure external image rendering server like https://github.com/grafana/grafana-image-renderer # Options to configure external image rendering server like https://github.com/grafana/grafana-image-renderer
;server_url = ;server_url =
;callback_url = ;callback_url =
;concurrent_limit = 10
;concurrent_limit_alerting = 5

@ -566,3 +566,11 @@ Default setting for new alert rules. Defaults to categorize error and timeouts a
> Available in 5.3 and above > Available in 5.3 and above
Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok) Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
# concurrent_render_limit
> Available in 5.3 and above
Alert notifications can include images, but rendering many images at the same time can overload the server.
This limit will protect the server from render overloading and make sure notifications are sent out quickly. Default
value is `5`.

@ -50,6 +50,7 @@ func (hs *HTTPServer) RenderToPng(c *m.ReqContext) {
Path: c.Params("*") + queryParams, Path: c.Params("*") + queryParams,
Timezone: queryReader.Get("tz", ""), Timezone: queryReader.Get("tz", ""),
Encoding: queryReader.Get("encoding", ""), Encoding: queryReader.Get("encoding", ""),
ConcurrentLimit: 30,
}) })
if err != nil && err == rendering.ErrTimeout { if err != nil && err == rendering.ErrTimeout {

@ -11,6 +11,7 @@ import (
"github.com/grafana/grafana/pkg/log" "github.com/grafana/grafana/pkg/log"
"github.com/grafana/grafana/pkg/metrics" "github.com/grafana/grafana/pkg/metrics"
"github.com/grafana/grafana/pkg/services/rendering" "github.com/grafana/grafana/pkg/services/rendering"
"github.com/grafana/grafana/pkg/setting"
m "github.com/grafana/grafana/pkg/models" m "github.com/grafana/grafana/pkg/models"
) )
@ -113,7 +114,7 @@ func (n *notificationService) uploadImage(context *EvalContext) (err error) {
Timeout: alertTimeout / 2, Timeout: alertTimeout / 2,
OrgId: context.Rule.OrgId, OrgId: context.Rule.OrgId,
OrgRole: m.ROLE_ADMIN, OrgRole: m.ROLE_ADMIN,
IsAlert: true, ConcurrentLimit: setting.AlertingRenderLimit,
} }
ref, err := context.GetDashboardUID() ref, err := context.GetDashboardUID()

@ -22,7 +22,7 @@ type Opts struct {
Path string Path string
Encoding string Encoding string
Timezone string Timezone string
IsAlert bool ConcurrentLimit int
} }
type RenderResult struct { type RenderResult struct {

@ -90,16 +90,8 @@ func (rs *RenderingService) Run(ctx context.Context) error {
return err return err
} }
func (rs *RenderingService) getLimit(isAlerting bool) int {
if isAlerting {
return rs.Cfg.RendererLimitAlerting
} else {
return rs.Cfg.RendererLimit
}
}
func (rs *RenderingService) Render(ctx context.Context, opts Opts) (*RenderResult, error) { func (rs *RenderingService) Render(ctx context.Context, opts Opts) (*RenderResult, error) {
if rs.inProgressCount > rs.getLimit(opts.IsAlert) { if rs.inProgressCount > opts.ConcurrentLimit {
return &RenderResult{ return &RenderResult{
FilePath: filepath.Join(setting.HomePath, "public/img/rendering_limit.png"), FilePath: filepath.Join(setting.HomePath, "public/img/rendering_limit.png"),
}, nil }, nil

@ -166,6 +166,7 @@ var (
// Alerting // Alerting
AlertingEnabled bool AlertingEnabled bool
ExecuteAlerts bool ExecuteAlerts bool
AlertingRenderLimit int
AlertingErrorOrTimeout string AlertingErrorOrTimeout string
AlertingNoDataOrNullValues string AlertingNoDataOrNullValues string
@ -648,9 +649,6 @@ func (cfg *Cfg) Load(args *CommandLineArgs) error {
// Rendering // Rendering
renderSec := iniFile.Section("rendering") renderSec := iniFile.Section("rendering")
cfg.RendererLimit = renderSec.Key("concurrent_limit").MustInt(10)
cfg.RendererLimitAlerting = renderSec.Key("concurrent_limit").MustInt(5)
cfg.RendererUrl = renderSec.Key("server_url").String() cfg.RendererUrl = renderSec.Key("server_url").String()
cfg.RendererCallbackUrl = renderSec.Key("callback_url").String() cfg.RendererCallbackUrl = renderSec.Key("callback_url").String()
if cfg.RendererCallbackUrl == "" { if cfg.RendererCallbackUrl == "" {
@ -683,6 +681,7 @@ func (cfg *Cfg) Load(args *CommandLineArgs) error {
alerting := iniFile.Section("alerting") alerting := iniFile.Section("alerting")
AlertingEnabled = alerting.Key("enabled").MustBool(true) AlertingEnabled = alerting.Key("enabled").MustBool(true)
ExecuteAlerts = alerting.Key("execute_alerts").MustBool(true) ExecuteAlerts = alerting.Key("execute_alerts").MustBool(true)
AlertingRenderLimit = alerting.Key("concurrent_render_limit").MustInt(5)
AlertingErrorOrTimeout = alerting.Key("error_or_timeout").MustString("alerting") AlertingErrorOrTimeout = alerting.Key("error_or_timeout").MustString("alerting")
AlertingNoDataOrNullValues = alerting.Key("nodata_or_nullvalues").MustString("no_data") AlertingNoDataOrNullValues = alerting.Key("nodata_or_nullvalues").MustString("no_data")

Loading…
Cancel
Save