mirror of
https://github.com/openfaas/faasd.git
synced 2025-06-30 02:33:23 +00:00
**What** - journald log provider using exec to journalctl ``` journalctl -t <namespace>:<name> --output=json --since=<timestamp> <--follow> --output-fields=SYSLOG_IDENTIFIER,MESSAGE,_PID,_SOURCE_REALTIME_TIMESTAMP ``` - This can be tested manually using `faas-cli logs` as normal, e.g. `faas-cli logs nodeinfo` should tail the last 5 mins of logs. - Very basic tests ensuring that the `journalctl` comamand is correctly construction and that the json log entrys are parsed correctly. - Add simple e2e test to grep the function logs Signed-off-by: Lucas Roesler <roesler.lucas@gmail.com>
63 lines
2.4 KiB
Go
63 lines
2.4 KiB
Go
// Package logs provides the standard interface and handler for OpenFaaS providers to expose function logs.
|
|
//
|
|
// The package defines the Requester interface that OpenFaaS providers should implement and then expose using
|
|
// the predefined NewLogHandlerFunc. See the example folder for a minimal log provider implementation.
|
|
//
|
|
// The Requester is where the actual specific logic for connecting to and querying the log system should be implemented.
|
|
//
|
|
package logs
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// Request is the query to return the function logs.
|
|
type Request struct {
|
|
// Name is the function name and is required
|
|
Name string `json:"name"`
|
|
// Namespace is the namespace the function is deployed to, how a namespace is defined
|
|
// is faas-provider specific
|
|
Namespace string `json:"namespace"`
|
|
// Instance is the optional container name, that allows you to request logs from a specific function instance
|
|
Instance string `json:"instance"`
|
|
// Since is the optional datetime value to start the logs from
|
|
Since *time.Time `json:"since"`
|
|
// Tail sets the maximum number of log messages to return, <=0 means unlimited
|
|
Tail int `json:"tail"`
|
|
// Follow is allows the user to request a stream of logs until the timeout
|
|
Follow bool `json:"follow"`
|
|
}
|
|
|
|
// String implements that Stringer interface and prints the log Request in a consistent way that
|
|
// allows you to safely compare if two requests have the same value.
|
|
func (r Request) String() string {
|
|
return fmt.Sprintf(
|
|
"name:%s namespace: %s instance:%s since:%v tail:%d follow:%v",
|
|
r.Name, r.Namespace, r.Instance, r.Since, r.Tail, r.Follow,
|
|
)
|
|
}
|
|
|
|
// Message is a specific log message from a function container log stream
|
|
type Message struct {
|
|
// Name is the function name
|
|
Name string `json:"name"`
|
|
// Namespace is the namespace the function is deployed to, how a namespace is defined
|
|
// is faas-provider specific
|
|
Namespace string `json:"namespace"`
|
|
// instance is the name/id of the specific function instance
|
|
Instance string `json:"instance"`
|
|
// Timestamp is the timestamp of when the log message was recorded
|
|
Timestamp time.Time `json:"timestamp"`
|
|
// Text is the raw log message content
|
|
Text string `json:"text"`
|
|
}
|
|
|
|
// String implements the Stringer interface and allows for nice and simple string formatting of a log Message.
|
|
func (m Message) String() string {
|
|
return fmt.Sprintf(
|
|
"%s %s (%s %s) %s",
|
|
m.Timestamp.String(), m.Name, m.Namespace, m.Instance, m.Text,
|
|
)
|
|
}
|