Add log shim and collect command

The collect command redirects function logs to the journal for
viewing on journalctl. faas-cli logs is not implemented as of
yet. View logs with journalctl -t openfaas-fn:FN_NAME_HERE.

Tested on Dell XPS with Ubuntu Linux. The approach takes
inspiration from the Stellar project.

Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com>
This commit is contained in:
Alex Ellis (OpenFaaS Ltd)
2020-02-23 19:47:25 +00:00
committed by Alex Ellis
parent 853830c018
commit 2307fc71c5
5 changed files with 41 additions and 1 deletions

View File

@ -75,6 +75,19 @@ ofc-bootstrap registry-login --username <your-registry-username> --password-stdi
``` ```
The file will be created in `./credentials/` The file will be created in `./credentials/`
### Logs for functions
You can view the logs of functions using `journalctl`:
```bash
journalctl -t openfaas-fn:FUNCTION_NAME
faas-cli store deploy figlet
journalctl -t openfaas-fn:figlet -f &
echo logs | faas-cli invoke figlet
```
### Manual / developer instructions ### Manual / developer instructions
See [here for manual / developer instructions](docs/DEV.md) See [here for manual / developer instructions](docs/DEV.md)

View File

@ -12,6 +12,10 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
func CollectCommand() *cobra.Command {
return collectCmd
}
var collectCmd = &cobra.Command{ var collectCmd = &cobra.Command{
Use: "collect", Use: "collect",
Short: "Collect logs to the journal", Short: "Collect logs to the journal",

View File

@ -18,6 +18,10 @@ func init() {
rootCommand.AddCommand(collectCmd) rootCommand.AddCommand(collectCmd)
} }
func RootCommand() *cobra.Command {
return rootCommand
}
var ( var (
// GitCommit Git Commit SHA // GitCommit Git Commit SHA
GitCommit string GitCommit string

16
main.go
View File

@ -1,6 +1,7 @@
package main package main
import ( import (
"fmt"
"os" "os"
"github.com/openfaas/faasd/cmd" "github.com/openfaas/faasd/cmd"
@ -15,6 +16,21 @@ var (
) )
func main() { func main() {
if _, ok := os.LookupEnv("CONTAINER_ID"); ok {
collect := cmd.RootCommand()
collect.SetArgs([]string{"collect"})
collect.SilenceUsage = true
collect.SilenceErrors = true
err := collect.Execute()
if err != nil {
fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1)
}
os.Exit(0)
}
if err := cmd.Execute(Version, GitCommit); err != nil { if err := cmd.Execute(Version, GitCommit); err != nil {
os.Exit(1) os.Exit(1)
} }

View File

@ -120,7 +120,10 @@ func deploy(ctx context.Context, req types.FunctionDeployment, client *container
func createTask(ctx context.Context, client *containerd.Client, container containerd.Container, cni gocni.CNI) error { func createTask(ctx context.Context, client *containerd.Client, container containerd.Container, cni gocni.CNI) error {
name := container.ID() name := container.ID()
task, taskErr := container.NewTask(ctx, cio.NewCreator(cio.WithStdio)) // task, taskErr := container.NewTask(ctx, cio.NewCreator(cio.WithStdio))
task, taskErr := container.NewTask(ctx, cio.BinaryIO("/usr/local/bin/faasd", nil))
if taskErr != nil { if taskErr != nil {
return fmt.Errorf("unable to start task: %s, error: %s", name, taskErr) return fmt.Errorf("unable to start task: %s, error: %s", name, taskErr)
} }