Folder
Checks the contents of a folder for size, age, and count. Folder based checks are useful in a number of scenarios:
- Verifying that backups have been uploaded and are the appropriate size
- Checking that logs or other temporary files are being cleaned up
- For batch processes:
- Checking if files are being processed (and/or produced)
- Checking the size of queue processing backlog
- Checking if any error (
.err
or.log
) files have been produced.
folder-check.yamlapiVersion: canaries.flanksource.com/v1
kind: Canary
metadata:
name: folder-check
spec:
schedule: "@every 5m"
folder:
- path: /etc/
name: folder-check-min
description: Checks if there are at least 10 files in the folder
minCount: 10
Field | Description | Scheme |
---|---|---|
name* | Name of the check, must be unique within the canary |
|
path* | A local folder path or a remote folder | |
awsConnection | AWS Access credentials | |
filter | Filter objects out before checking if they are valid | |
gcpConnection | Connection details for GCP | |
maxAge | The oldest age a file can be, often used to check for unprocessed files or files that have not been cleaned up | |
maxCount | The maximum number of files inside the |
|
maxSize | The maximum file size | |
minAge | The youngest age a file can be | |
minCount | The minimum number of files inside the |
|
minSize | The minimum file size, can be used to detect backups that did not upload successfully | |
sftpConnection | Connection details | |
smbConnection | SMB connection details | |
description | Description for the check |
|
display | Expression to change the formatting of the display | |
icon | Icon for overwriting default icon on the dashboard | |
labels | Labels for check | map[string]string |
metrics | Metrics to export from | |
test | Evaluate whether a check is healthy | |
transform | Transform data from a check into multiple individual checks |
FolderFilter
Field | Description | Scheme | Required |
---|---|---|---|
maxAge | MaxAge the latest object should be younger than defined age | Duration | |
maxSize | MaxSize of the files inside the searchPath | Size | |
minAge | MinAge the latest object should be older than defined age | Duration | |
minSize | MinSize of the files inside the searchPath | Size | |
regex | Filter files based on regular expression | regex |
e.g. to verify that database backups are being performed
postgres-backup-check.yamlapiVersion: canaries.flanksource.com/v1
kind: Canary
metadata:
name: folder-check
spec:
schedule: "@every 5m"
folder:
- name: pg-backup checks
path: /data/backups
filter:
regex: "pg-backups-.*.zip"
maxAge: 1d # require a daily backup
minSize: 10mb # the backup should be at least 10mb
Result Variables
The following fields are available in test
, display
and transform
expressions
Field | Scheme |
---|---|
Oldest | os.FileInfo |
Newest | os.FileInfo |
MinSize | os.FileInfo |
MaxSize | os.FileInfo |
SupportsTotalSize (Only true for SMB folders) | bool |
SupportsAvailableSize (Only true for SMB folders) | bool |
TotalSize | int64 |
AvailableSize | int64 |
Files | []os.FileInfo |
FolderFilter
Field | Description | Scheme | Required |
---|---|---|---|
minAge | Duration | ||
maxAge | Duration | ||
minSize | Size | ||
maxSize | Size | ||
regex | string |
Connection Types
SFTP
Field | Description | Scheme |
---|---|---|
host | SFTP host |
|
port | SFTP port |
|
username | ||
password |
SFTP Check
exec_artifact.yamlapiVersion: canaries.flanksource.com/v1
kind: Canary
metadata:
name: sftp-pass
spec:
schedule: "@every 5m"
folder:
- path: /tmp
name: sample sftp check
sftpConnection:
host: 192.168.1.5
username:
value: <username>
password:
value: <password>
maxCount: 10
S3
Field | Description | Scheme |
---|---|---|
accessKey | ||
secretKey | ||
region | The AWS region |
|
endpoint | Custom AWS Endpoint to use | |
skipTLSVerify | Skip TLS verify when connecting to AWS |
|
S3 Bucket
exec_artifact.yamlapiVersion: canaries.flanksource.com/v1
kind: Canary
metadata:
name: s3-bucket-pass
namespace: canaries
spec:
schedule: "@every 5m"
folder:
# Check for any backup not older than 7 days and min size 25 bytes
- path: s3://tests-e2e-1
name: mysql backup check
awsConnection:
accessKey:
valueFrom:
secretKeyRef:
name: aws-credentials
key: AWS_ACCESS_KEY_ID
secretKey:
valueFrom:
secretKeyRef:
name: aws-credentials
key: AWS_SECRET_ACCESS_KEY
region: "minio"
endpoint: "http://minio.minio:9000"
usePathStyle: true
skipTLSVerify: true
filter:
regex: "(.*)backup.zip$"
maxAge: 7d
minSize: 25b
# Check for any mysql backup not older than 7 days and min size 25 bytes
- path: s3://tests-e2e-1
name: mysql backup check (7 days and 25 bytes size)
awsConnection:
accessKey:
valueFrom:
secretKeyRef:
name: aws-credentials
key: AWS_ACCESS_KEY_ID
secretKey:
valueFrom:
secretKeyRef:
name: aws-credentials
key: AWS_SECRET_ACCESS_KEY
region: "minio"
endpoint: "http://minio.minio:9000"
usePathStyle: true
skipTLSVerify: true
filter:
regex: "mysql\\/backups\\/(.*)\\/mysql.zip$"
maxAge: 7d
minSize: 25b
# Check for any pg backup not older than 7 days and min size 50 bytes
- path: s3://tests-e2e-1
name: pg backup check (7 days and 50 bytes size)
awsConnection:
accessKey:
valueFrom:
secretKeyRef:
name: aws-credentials
key: AWS_ACCESS_KEY_ID
secretKey:
valueFrom:
secretKeyRef:
name: aws-credentials
key: AWS_SECRET_ACCESS_KEY
region: "minio"
endpoint: "http://minio.minio:9000"
usePathStyle: true
skipTLSVerify: true
filter:
regex: "pg\\/backups\\/(.*)\\/backup.zip$"
maxAge: 7d
minSize: 25b
- name: recursive folders
namespace: default
path: s3://recursive-test/developers/**/*.txt
minCount: 4
display:
expr: results.?files.orValue([]).map(i, i.name).join(", ")
awsConnection:
region: "minio"
endpoint: "http://minio.minio:9000"
usePathStyle: true
skipTLSVerify: true
accessKey:
valueFrom:
secretKeyRef:
name: aws-credentials
key: AWS_ACCESS_KEY_ID
secretKey:
valueFrom:
secretKeyRef:
name: aws-credentials
key: AWS_SECRET_ACCESS_KEY
SMB
Field | Description | Scheme |
---|---|---|
host | The SMB host |
|
port |
| |
domain | Windows Domain | |
username | ||
password |
SMB / CIFS
smb.yamlapiVersion: canaries.flanksource.com/v1
kind: Canary
metadata:
name: smb-pass
spec:
schedule: "@every 5m"
folder:
# Check for any backup not older than 7 days and min size 25 bytes
- path: \\windows-server\sharename\folder
smbConnection:
username:
valueFrom:
secretKeyRef:
name: smb-credentials
key: USERNAME
password:
valueFrom:
secretKeyRef:
name: ssmb-credentials
key: PASSWORD
filter:
regex: "(.*)backup.zip$"
maxAge: 7d
minSize: 25b
GCS
Field | Description | Scheme |
---|---|---|
credentials | The credentials to use for authentication |
GCS Check
gcs.yaml---
apiVersion: canaries.flanksource.com/v1
kind: Canary
metadata:
name: recursive-folder-check
spec:
schedule: "@every 5m"
folder:
- path: gcs://folder-check-test/recursive-test
name: recursive folders
namespace: default
minCount: 3
recursive: true
display:
expr: results.?files.orValue([]).map(i, i.name).join(", ")
gcpConnection:
connection: connection://gcs/flanksource-prod