183 lines
13 KiB
Markdown
183 lines
13 KiB
Markdown
# friendica-exporter
|
|
|
|
A [prometheus](https://prometheus.io) exporter for getting some metrics of a [Friendica](https://friendi.ca/) server instance.
|
|
|
|
## Installation
|
|
|
|
### Docker image
|
|
|
|
The preferred way to use `friendica-exporter` is by running the provided Docker image.
|
|
It is currently provided on Docker Hub:
|
|
|
|
- [`friendica/friendica-exporter`](https://hub.docker.com/r/friendica/friendica-exporter/)
|
|
|
|
The following tags are available:
|
|
|
|
- `x.y.z` pointing to the release with that version
|
|
- `latest` pointing to the most recent released version
|
|
- `stable` pointing to the latest build from the default branch
|
|
|
|
### Pre-built binaries
|
|
|
|
The [releases](https://git.friendi.ca/friendica/friendica-exporter/releases) page contains pre-built binaries for AMD64 and ARM64 linux.
|
|
|
|
### Build from Source
|
|
|
|
If you have a recent Go installation (see `go.mod` for the minimum version), Git and GNU Make, the following commands will check out the repository and compile the binary from source:
|
|
|
|
```bash
|
|
git clone https://git.friendi.ca/friendica/friendica-exporter.git
|
|
cd friendica-exporter
|
|
make
|
|
```
|
|
|
|
After this there should be a `friendica-exporter` binary in your current directory.
|
|
|
|
### Token authentication
|
|
|
|
Frienidca only supports using a `system.stats_token` to access the `/stats` endpoint.
|
|
You can set the token to anything you like, but teh recommendation is to set it to along random number:
|
|
|
|
|
|
```bash
|
|
# Generate random value (for example using openssl)
|
|
TOKEN=$(openssl rand -hex 32)
|
|
# Set token (using the occ console application)
|
|
bin/console.php config system stats_config "$TOKEN"
|
|
```
|
|
|
|
## Usage
|
|
|
|
```plain
|
|
$ friendica-exporter --help
|
|
Usage of friendica-exporter:
|
|
-a, --addr string Address to listen on for connections. (default ":9205")
|
|
-c, --config-file string Path to YAML configuration file.
|
|
-s, --server string URL to Friendica server.
|
|
-u, --statsToken string Token for statistics Endpoint of Friendica.
|
|
-t, --timeout duration Timeout for getting server info document. (default 5s)
|
|
--tls-skip-verify Skip certificate verification of Friendica server.
|
|
-V, --version Show version information and exit.
|
|
```
|
|
|
|
After starting the server will offer the metrics on the `/metrics` endpoint, which can be used as a target for prometheus.
|
|
|
|
### Example Dashboard
|
|
|
|
The repository contains an [example Grafana dashboard](contrib/grafana-dashboard.json) that can be imported into Grafana.
|
|
|
|
### Configuration methods
|
|
|
|
There are three methods of configuring the friendica-exporter (higher methods take precedence over lower ones):
|
|
|
|
- Environment variables
|
|
- Configuration file
|
|
- Command-line parameters
|
|
|
|
#### Environment variables
|
|
|
|
All settings can also be specified through environment variables:
|
|
|
|
| Environment variable | Flag equivalent |
|
|
|----------------------------:|:---------------------|
|
|
| `FRIENDICA_SERVER` | --server |
|
|
| `FRIENDICA_STATS_TOKEN` | --stats-token |
|
|
| `FRIENDICA_LISTEN_ADDRESS` | --addr |
|
|
| `FRIENDICA_TIMEOUT` | --timeout |
|
|
| `FRIENDICA_TLS_SKIP_VERIFY` | --tls-skip-verify |
|
|
|
|
#### Configuration file
|
|
|
|
The `--config-file` option can be used to read the configuration options from a YAML file:
|
|
|
|
```yaml
|
|
# required
|
|
server: "https://example.com"
|
|
# required for token authentication
|
|
statsToken: "example-token"
|
|
# optional
|
|
listenAddress: ":9205"
|
|
timeout: "5s"
|
|
tlsSkipVerify: false
|
|
```
|
|
|
|
### Loading Credentials from Files
|
|
|
|
The stats token can optionally be read from a separate file instead of directly from the input methods above.
|
|
|
|
This can be achieved by setting the value to the path of the file prefixed with an "@", for example:
|
|
|
|
```bash
|
|
# Authentication token
|
|
friendica-exporter -c config-without-token.yml --stats-token @/path/to/tokenfile
|
|
```
|
|
|
|
This also works when token token is set using one of the other configuration modes (configuration file or environment variables).
|
|
|
|
## Other information
|
|
|
|
### Info URL
|
|
|
|
The exporter reads the metrics from the Friendica server using its "stats" endpoint.
|
|
It should look something like this:
|
|
|
|
```plain
|
|
https://example.com/stats
|
|
```
|
|
|
|
The path will be automatically added to the server URL you provide, so in the above example setting `--server https://example.com` would be sufficient.
|
|
|
|
If you open this URL in a browser you should see an XML structure with the information that will be used by the exporter.
|
|
|
|
### Scrape configuration
|
|
|
|
The exporter will query the friendica server every time it is scraped by prometheus.
|
|
If you want to reduce load on the friendica server you need to change the scrape interval accordingly:
|
|
|
|
```yml
|
|
scrape_configs:
|
|
- job_name: 'friendica'
|
|
scrape_interval: 90s
|
|
static_configs:
|
|
- targets: ['friendica:9205']
|
|
```
|
|
|
|
### Exported metrics
|
|
|
|
These metrics are exported by `friendica-exporter`:
|
|
|
|
| name | description |
|
|
|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
| friendica_cron_last_execution | Contains information about the last execution of cron of this Instance |
|
|
| friendica_exporter_info | Information about the friendica-exporter |
|
|
| friendica_packets_inbound | Number of packets inbound. |
|
|
| friendica_packets_outbound | Number of packets outbound. |
|
|
| friendica_php_info | Contains meta information about PHP as labels. Value is always 1. |
|
|
| friendica_php_memory_limit_bytes | Configured PHP memory limit in bytes. |
|
|
| friendica_php_post_max_allowed_packet | Configured maximum allowed packet length to send to or receive from the server. |
|
|
| friendica_php_post_max_size_bytes | Configured maximum post size in bytes. |
|
|
| friendica_php_upload_max_size_bytes | Configured maximum upload size in bytes. |
|
|
| friendica_posts_inbound | Number of posts inbound. |
|
|
| friendica_posts_outbound | Number of posts outbound. |
|
|
| friendica_reports_closed | Number of closed reports. |
|
|
| friendica_reports_newest | Contains the datetime about the newest report of this Instance. |
|
|
| friendica_reports_open | Number of open reports. |
|
|
| friendica_server_info | Contains meta information about Server as labels. Value is always 1. |
|
|
| friendica_up | Indicates if the metrics could be scraped by the exporter |
|
|
| friendica_update_available | Contains information whether a system update is available (0 = no, 1 = yes). The available_version level contains the latest available Friendica version, whereas the version level contains the current installed Friendica version. |
|
|
| friendica_update_db_status | Contains information whether a database update was successful (0 = no, 1 = yes) |
|
|
| friendica_update_status | Contains information whether a system update was successful (1 = no, 0 = yes) |
|
|
| friendica_users_active_half_year | Number of active users of the last half year |
|
|
| friendica_users_active_month | Number of active users of the last month |
|
|
| friendica_users_active_week | Number of active users of the last week |
|
|
| friendica_users_pending | Number of pending users |
|
|
| friendica_users_total | Number of total users of this Instance |
|
|
| friendica_worker_jpm | Number of jobs per Minute |
|
|
| friendica_worker_last_execution | Contains information about the last execution of worker of this Instance |
|
|
| friendica_worker_tasks_active | Number of active worker tasks of this Instance |
|
|
| friendica_worker_tasks_total | Number of worker tasks of this Instance |
|
|
|
|
|
|
# Thanks
|
|
|
|
Special thanks goes to https://github.com/xperimental and his contributors, because a lot of code is based on https://github.com/xperimental/nextcloud-exporter |