Merge pull request #260 from prometheus/feature/show-scrape-errors

Remember and display last scrape errors in web UI.
This commit is contained in:
Matt T. Proud 2013-05-21 06:40:39 -07:00
commit 053f4296d0
4 changed files with 28 additions and 3 deletions

View File

@ -90,6 +90,8 @@ type Target interface {
// //
// Right now, this is used as the sorting key in TargetPool. // Right now, this is used as the sorting key in TargetPool.
scheduledFor() time.Time scheduledFor() time.Time
// Return the last encountered scrape error, if any.
LastError() error
// The address to which the Target corresponds. Out of all of the available // The address to which the Target corresponds. Out of all of the available
// points in this interface, this one is the best candidate to change given // points in this interface, this one is the best candidate to change given
// the ways to express the endpoint. // the ways to express the endpoint.
@ -110,13 +112,17 @@ type target struct {
// scheduler provides the scheduling strategy that is used to formulate what // scheduler provides the scheduling strategy that is used to formulate what
// is returned in Target.scheduledFor. // is returned in Target.scheduledFor.
scheduler scheduler scheduler scheduler
// The current health state of the target.
state TargetState state TargetState
// The last encountered scrape error, if any.
lastError error
address string address string
// What is the deadline for the HTTP or HTTPS against this endpoint. // What is the deadline for the HTTP or HTTPS against this endpoint.
Deadline time.Duration Deadline time.Duration
// Any base labels that are added to this target and its metrics. // Any base labels that are added to this target and its metrics.
baseLabels model.LabelSet baseLabels model.LabelSet
// The HTTP client used to scrape the target's endpoint.
client http.Client client http.Client
} }
@ -176,6 +182,7 @@ func (t *target) Scrape(earliest time.Time, results chan format.Result) (err err
t.scheduler.Reschedule(earliest, futureState) t.scheduler.Reschedule(earliest, futureState)
t.state = futureState t.state = futureState
t.lastError = err
return err return err
} }
@ -221,6 +228,10 @@ func (t target) scheduledFor() time.Time {
return t.scheduler.ScheduledFor() return t.scheduler.ScheduledFor()
} }
func (t target) LastError() error {
return t.lastError
}
func (t target) Address() string { func (t target) Address() string {
return t.address return t.address
} }

View File

@ -31,6 +31,10 @@ type fakeTarget struct {
scheduleIndex int scheduleIndex int
} }
func (t fakeTarget) LastError() error {
return nil
}
func (t fakeTarget) Address() string { func (t fakeTarget) Address() string {
return "fake" return "fake"
} }

View File

@ -83,3 +83,9 @@ input[name=end_input], input[name=range_input] {
.literal_output td { .literal_output td {
font-family: monospace; font-family: monospace;
} }
.error_text {
background-color: #f2dede;
border: 1px solid #c0a0a0;
padding: 0 2px 0 2px;
}

View File

@ -36,6 +36,10 @@
{{range $pool.Targets}} {{range $pool.Targets}}
<li> <li>
<a href="{{.GlobalAddress}}">{{.Address}}</a> (State: {{.State}}, Base Labels: {{.BaseLabels}}) <a href="{{.GlobalAddress}}">{{.Address}}</a> (State: {{.State}}, Base Labels: {{.BaseLabels}})
{{if .LastError}}
<br/>
<span class="error_text"><b>Scrape error:</b> "{{.LastError}}"</span>
{{end}}
</li> </li>
{{end}} {{end}}
</ul> </ul>