mirror of
https://github.com/grafana/grafana.git
synced 2025-09-25 21:04:05 +08:00
Changed setting to be an alerting setting
This commit is contained in:
@ -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`.
|
||||||
|
@ -41,15 +41,16 @@ func (hs *HTTPServer) RenderToPng(c *m.ReqContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
result, err := hs.RenderService.Render(c.Req.Context(), rendering.Opts{
|
result, err := hs.RenderService.Render(c.Req.Context(), rendering.Opts{
|
||||||
Width: width,
|
Width: width,
|
||||||
Height: height,
|
Height: height,
|
||||||
Timeout: time.Duration(timeout) * time.Second,
|
Timeout: time.Duration(timeout) * time.Second,
|
||||||
OrgId: c.OrgId,
|
OrgId: c.OrgId,
|
||||||
UserId: c.UserId,
|
UserId: c.UserId,
|
||||||
OrgRole: c.OrgRole,
|
OrgRole: c.OrgRole,
|
||||||
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"
|
||||||
)
|
)
|
||||||
@ -108,12 +109,12 @@ func (n *notificationService) uploadImage(context *EvalContext) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderOpts := rendering.Opts{
|
renderOpts := rendering.Opts{
|
||||||
Width: 1000,
|
Width: 1000,
|
||||||
Height: 500,
|
Height: 500,
|
||||||
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()
|
||||||
|
@ -13,16 +13,16 @@ var ErrNoRenderer = errors.New("No renderer plugin found nor is an external rend
|
|||||||
var ErrPhantomJSNotInstalled = errors.New("PhantomJS executable not found")
|
var ErrPhantomJSNotInstalled = errors.New("PhantomJS executable not found")
|
||||||
|
|
||||||
type Opts struct {
|
type Opts struct {
|
||||||
Width int
|
Width int
|
||||||
Height int
|
Height int
|
||||||
Timeout time.Duration
|
Timeout time.Duration
|
||||||
OrgId int64
|
OrgId int64
|
||||||
UserId int64
|
UserId int64
|
||||||
OrgRole models.RoleType
|
OrgRole models.RoleType
|
||||||
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")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user