Compare commits

..

No commits in common. "develop" and "v3.4.0.5" have entirely different histories.

394 changed files with 33498 additions and 47939 deletions

2
.bandit Normal file
View File

@ -0,0 +1,2 @@
[bandit]
exclude: ./docs,./glances/outputs/static/node_modules

View File

@ -4,6 +4,7 @@ include =
*glances*
omit =
setup.py
glances/outputs/*
glances/exports/*
glances/compat.py

View File

@ -8,15 +8,13 @@
!/glances/outputs/static
# Include Requirements files
!/all-requirements.txt
!/requirements.txt
!/docker-requirements.txt
!/webui-requirements.txt
!/optional-requirements.txt
# Include Config file
!/docker-compose/glances.conf
!/docker-files/docker-logger.json
# Include Binary file
!/docker-bin.sh
# Include TOML file
!/pyproject.toml

8
.flake8 Normal file
View File

@ -0,0 +1,8 @@
[flake8]
exclude = .git,__pycache__,docs/,build,dist
ignore =
W504, B007, B014, B008, B902, Q000,
N801, N802, N803, N806, N807, N811, N812, N813, N814, N815, N816, N817, N818
# lines should not exceed 120 characters
max-line-length = 120

View File

@ -6,9 +6,6 @@ labels: ''
assignees: ''
---
**Check the bug**
Before filling this bug report, please search if a similar issue already exists.
In this case, just add a comment on this existing issue.
**Describe the bug**
A clear and concise description of what the bug is.
@ -29,7 +26,11 @@ If applicable, add screenshots to help explain your problem.
- Operating System (lsb_release -a or OS name/version): `To be completed with result of: lsb_release -a`
- Glances & psutil versions: `To be completed with result of: glances -V`
- How do you install Glances (Pypi package, script, package manager, source): `To be completed`
- Glances test: ` To be completed with result of: glances --issue`
- Glances test (only available with Glances 3.1.7 or higher):
```
To be completed with result of: glances --issue
```
**Additional context**
Add any other context about the problem here.

View File

@ -1,82 +1,153 @@
# This pipeline aims at building Glances Pypi packages
# This pipeline aims at building Glances for the following targets:
# - Docker Hub
# - Pypi
name: build
name: CI
env:
DEFAULT_DOCKER_IMAGE: nicolargo/glances
NODE_ENV: ${{ (contains('refs/heads/master', github.ref) || startsWith(github.ref, 'refs/tags/v')) && 'prod' || 'dev' }}
PUSH_BRANCH: ${{ 'refs/heads/develop' == github.ref || 'refs/heads/master' == github.ref || startsWith(github.ref, 'refs/tags/v') }}
# linux/arm/v7 (drop support for v6) support following issue - See issue #2120
DOCKER_PLATFORMS: linux/amd64,linux/arm/v7,linux/arm64,linux/386
# Ubuntu image only support linux/amd64 and linux/arm64 - See issue #2185
DOCKER_PLATFORMS_UBUNTU: linux/amd64,linux/arm64
on:
workflow_call:
pull_request:
branches: [ develop ]
push:
branches: [ master, develop ]
tags:
- v*
jobs:
build:
name: Build distribution 📦
if: github.event_name == 'push'
pypi:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install pypa/build
- uses: actions/checkout@v3
- name: Install pip install build tools
run: >-
python3 -m
python -m
pip install
build
--user
- name: Build a binary wheel and a source tarball
run: python3 -m build
- name: Store the distribution packages
uses: actions/upload-artifact@v4
with:
name: python-package-distributions
path: dist/
run: >-
python -m
build
--sdist
--wheel
--outdir dist/
pypi:
name: Publish Python 🐍 distribution 📦 to PyPI
if: startsWith(github.ref, 'refs/tags')
needs:
- build
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/glances
permissions:
attestations: write
id-token: write
steps:
- name: Download all the dists
uses: actions/download-artifact@v5
with:
name: python-package-distributions
path: dist/
- name: Publish distribution 📦 to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
skip-existing: true
attestations: false
print-hash: true
pypi_test:
name: Publish Python 🐍 distribution 📦 to TestPyPI
if: github.ref == 'refs/heads/develop'
needs:
- build
runs-on: ubuntu-latest
environment:
name: testpypi
url: https://pypi.org/p/glances
permissions:
attestations: write
id-token: write
steps:
- name: Download all the dists
uses: actions/download-artifact@v5
with:
name: python-package-distributions
path: dist/
- name: Publish distribution 📦 to TestPyPI
- name: Publish distribution package to Test PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
repository-url: https://test.pypi.org/legacy/
skip-existing: true
attestations: false
- name: Publish distribution package to PyPI
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
create_Docker_builds:
runs-on: ubuntu-latest
# Make sure we release the python package first. So we are sure to get the latest.
needs:
- pypi
outputs:
tags: ${{ steps.config.outputs.tags }}
steps:
- name: Determine image tags
id: config
shell: bash
run: |
TAG_ARRAY='['
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/v}
TAG_ARRAY="$TAG_ARRAY { \"target\": \"minimal\", \"tag\": \"${VERSION}\" },"
TAG_ARRAY="$TAG_ARRAY { \"target\": \"full\", \"tag\": \"${VERSION}-full\" },"
elif [[ $GITHUB_REF == refs/heads/develop ]]; then
TAG_ARRAY="$TAG_ARRAY { \"target\": \"dev\", \"tag\": \"dev\" },"
else
TAG_ARRAY="$TAG_ARRAY { \"target\": \"minimal\", \"tag\": \"latest\" },"
TAG_ARRAY="$TAG_ARRAY { \"target\": \"full\", \"tag\": \"latest-full\" },"
fi
TAG_ARRAY="${TAG_ARRAY::-1} ]"
echo "Tags to build: $TAG_ARRAY"
echo "::set-output name=tags::$TAG_ARRAY"
build_Docker_image:
runs-on: ubuntu-latest
needs:
- create_Docker_builds
strategy:
fail-fast: false
matrix:
os: ['alpine', 'ubuntu']
tag: ${{ fromJson(needs.create_Docker_builds.outputs.tags) }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Retrieve Repository Docker metadata
id: docker_meta
uses: crazy-max/ghaction-docker-meta@v4.4.0
with:
images: ${{ env.DEFAULT_DOCKER_IMAGE }}
labels: |
org.opencontainers.image.url=https://nicolargo.github.io/glances/
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ env.NODE_ENV }}-${{ matrix.os }}-${{ matrix.tag.tag }}
restore-keys: ${{ runner.os }}-buildx-${{ env.NODE_ENV }}-${{ matrix.os }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: all
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2
with:
version: latest
- name: Login to DockerHub
uses: docker/login-action@v2
if: ${{ env.PUSH_BRANCH == 'true' }}
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push image
uses: docker/build-push-action@v4
with:
push: ${{ env.PUSH_BRANCH == 'true' }}
tags: "${{ env.DEFAULT_DOCKER_IMAGE }}:${{ matrix.os != 'alpine' && format('{0}-', matrix.os) || '' }}${{ matrix.tag.tag }}"
build-args: |
CHANGING_ARG=${{ github.sha }}
context: .
file: "docker-files/${{ matrix.os }}.Dockerfile"
platforms: ${{ matrix.os != 'ubuntu' && env.DOCKER_PLATFORMS || env.DOCKER_PLATFORMS_UBUNTU }}
target: ${{ matrix.tag.target }}
labels: ${{ steps.docker_meta.outputs.labels }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache,mode=max

View File

@ -1,105 +0,0 @@
# This pipeline aims at building Glances Docker images
name: build_docker
env:
DEFAULT_DOCKER_IMAGE: nicolargo/glances
PUSH_BRANCH: ${{ 'refs/heads/develop' == github.ref || startsWith(github.ref, 'refs/tags/v') }}
# Alpine image platform: https://hub.docker.com/_/alpine
# linux/arm/v6,linux/arm/v7 do not work (timeout during the build)
DOCKER_PLATFORMS: linux/amd64,linux/arm64/v8
# Ubuntu image platforms list: https://hub.docker.com/_/ubuntu
# linux/arm/v7 do not work (Cargo/Rust not available)
DOCKER_PLATFORMS_UBUNTU: linux/amd64,linux/arm64/v8
on:
workflow_call:
secrets:
DOCKER_USERNAME:
description: 'Docker Hub username'
required: true
DOCKER_TOKEN:
description: 'Docker Hub token'
required: true
jobs:
create_docker_images_list:
runs-on: ubuntu-latest
outputs:
tags: ${{ steps.config.outputs.tags }}
steps:
- name: Determine image tags
id: config
shell: bash
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/v}
TAG_ARRAY="[{ \"target\": \"minimal\", \"tag\": \"${VERSION}\" },"
TAG_ARRAY="$TAG_ARRAY { \"target\": \"minimal\", \"tag\": \"latest\" },"
TAG_ARRAY="$TAG_ARRAY { \"target\": \"full\", \"tag\": \"${VERSION}-full\" },"
TAG_ARRAY="$TAG_ARRAY { \"target\": \"full\", \"tag\": \"latest-full\" }]"
elif [[ $GITHUB_REF == refs/heads/develop ]]; then
TAG_ARRAY="[{ \"target\": \"dev\", \"tag\": \"dev\" }]"
else
TAG_ARRAY="[]"
fi
echo "Tags to build: $TAG_ARRAY"
echo "tags=$TAG_ARRAY" >> $GITHUB_OUTPUT
build_docker_images:
runs-on: ubuntu-latest
needs:
- create_docker_images_list
strategy:
fail-fast: false
matrix:
os: ['alpine', 'ubuntu']
tag: ${{ fromJson(needs.create_docker_images_list.outputs.tags) }}
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Retrieve Repository Docker metadata
id: docker_meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DEFAULT_DOCKER_IMAGE }}
labels: |
org.opencontainers.image.url=https://nicolargo.github.io/glances/
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: all
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
with:
version: latest
- name: Login to DockerHub
uses: docker/login-action@v3
if: ${{ env.PUSH_BRANCH == 'true' }}
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push image
uses: docker/build-push-action@v6
with:
push: ${{ env.PUSH_BRANCH == 'true' }}
tags: "${{ env.DEFAULT_DOCKER_IMAGE }}:${{ matrix.os != 'alpine' && format('{0}-', matrix.os) || '' }}${{ matrix.tag.tag }}"
build-args: |
CHANGING_ARG=${{ github.sha }}
context: .
file: "docker-files/${{ matrix.os }}.Dockerfile"
platforms: ${{ matrix.os != 'ubuntu' && env.DOCKER_PLATFORMS || env.DOCKER_PLATFORMS_UBUNTU }}
target: ${{ matrix.tag.target }}
labels: ${{ steps.docker_meta.outputs.labels }}
# GHA default behaviour overwrites last build cache. Causes alpine and ubuntu cache to overwrite each other.
# Use `scope` with the os name to prevent that
cache-from: 'type=gha,scope=${{ matrix.os }}'
cache-to: 'type=gha,mode=max,scope=${{ matrix.os }}'

View File

@ -1,27 +0,0 @@
name: ci
on:
pull_request:
branches: [ develop ]
push:
branches: [ master, develop ]
tags:
- v*
jobs:
quality:
uses: ./.github/workflows/quality.yml
test:
uses: ./.github/workflows/test.yml
needs: [quality]
build:
if: github.event_name != 'pull_request'
uses: ./.github/workflows/build.yml
needs: [quality, test]
build_docker:
if: github.event_name != 'pull_request'
uses: ./.github/workflows/build_docker.yml
secrets:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
needs: [quality, test]

View File

@ -1,7 +1,24 @@
name: quality
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
workflow_call:
push:
branches: [ develop ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ develop ]
schedule:
- cron: '20 20 * * 0'
jobs:
analyze:
@ -22,11 +39,11 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@ -37,7 +54,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
uses: github/codeql-action/autobuild@v2
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@ -51,4 +68,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v2

View File

@ -1,28 +0,0 @@
name: cyber
on:
workflow_call:
jobs:
trivy:
name: Trivy scan
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Run Trivy vulnerability scanner in repo mode
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
ignore-unfixed: true
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL'
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: 'trivy-results.sarif'

View File

@ -1,22 +0,0 @@
name: Label inactive issues
on:
schedule:
- cron: "30 1 * * *"
jobs:
close-issues:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
with:
days-before-issue-stale: 90
days-before-issue-close: -1
stale-issue-label: "inactive"
stale-issue-message: "This issue is stale because it has been open for 3 months with no activity."
close-issue-message: "This issue was closed because it has been inactive for 30 days since being marked as stale."
days-before-pr-stale: -1
days-before-pr-close: -1
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,22 +0,0 @@
name: Add a message when needs contributor tag is used
on:
issues:
types:
- labeled
jobs:
add-comment:
if: github.event.label.name == 'needs contributor'
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Add comment
run: gh issue comment "$NUMBER" --body "$BODY"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.issue.number }}
BODY: >
This issue is available for anyone to work on.
**Make sure to reference this issue in your pull request.**
:sparkles: Thank you for your contribution ! :sparkles:

View File

@ -1,143 +1,86 @@
# Run unitary test
# Run unitary test + flake8
name: test
on:
workflow_call:
on: [push]
jobs:
source-code-checks:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
- name: Check formatting with Ruff
uses: chartboost/ruff-action@v1
with:
args: 'format --check'
- name: Check linting with Ruff
uses: chartboost/ruff-action@v1
with:
args: 'check'
# - name: Static type check
# run: |
# echo "Skipping static type check for the moment, too much error...";
# # pip install pyright
# # pyright glances
test-linux:
needs: source-code-checks
# https://github.com/actions/runner-images?tab=readme-ov-file#available-images
runs-on: ubuntu-24.04
runs-on: ubuntu-latest
strategy:
matrix:
# Python EOL version are note tested
# Multiple Python version only tested for Linux
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v5
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
if [ -f dev-requirements.txt ]; then python -m pip install -r dev-requirements.txt; fi
if [ -f requirements.txt ]; then python -m pip install -r requirements.txt; fi
- name: Unitary tests
run: |
python -m pytest ./tests/test_core.py
test-windows:
needs: source-code-checks
# https://github.com/actions/runner-images?tab=readme-ov-file#available-images
runs-on: windows-2025
strategy:
matrix:
# Windows-curses not available for Python 3.14 for the moment
# See https://github.com/zephyrproject-rtos/windows-curses/issues/76
python-version: ["3.13"]
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
if (Test-Path -PathType Leaf "dev-requirements.txt") { python -m pip install -r dev-requirements.txt }
if (Test-Path -PathType Leaf "requirements.txt") { python -m pip install -r requirements.txt }
pip install .
python -m pip install --upgrade pip
pip install flake8
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
# Stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=.git,./docs,./glances/outputs/static
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --exclude=.git,./docs,./glances/outputs/static
# - name: Lint with Ruff
# uses: chartboost/ruff-action@v1
- name: Static type check
run: |
if [ "${{ matrix.python-version }}" == "2.7" ];
then
echo "Skipping static type check for Python 2.7";
else
echo "Skipping static type check for the moment, too much error...";
# pip install pyright
# pyright glances
fi
- name: Unitary tests
run: |
python -m pytest ./tests/test_core.py
python ./unitest.py
test-macos:
- name: Security issues with Bandit
uses: jpetrucciani/bandit-check@master
with:
#path: '-r --exit-zero --skip B104 ./glances/'
path: '-r --exit-zero --skip B104 ./glances/'
needs: source-code-checks
# https://github.com/actions/runner-images?tab=readme-ov-file#available-images
runs-on: macos-15
test-windows:
runs-on: windows-latest
strategy:
matrix:
# Only test the latest stable version
python-version: ["3.14"]
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
if [ -f dev-requirements.txt ]; then python -m pip install -r dev-requirements.txt; fi
if [ -f requirements.txt ]; then python -m pip install -r requirements.txt; fi
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if (Test-Path -PathType Leaf "requirements.txt") { python -m pip install -r requirements.txt }
python setup.py install
- name: Unitary tests
run: |
python -m pytest ./tests/test_core.py
# Error when trying to implement #2749
# pkg: No packages available to install matching 'py-pip' have been found in the repositories
# test-freebsd:
# runs-on: ubuntu-22.04
# steps:
# - uses: actions/checkout@v4
# - name: Run tests
# uses: vmactions/freebsd-vm@v1
# with:
# usesh: true
# prepare: |
# pkg install -y python3
# run: |
# set -e -x
# python3 -m pip install pytest
# python3 -m pip install --user -r dev-requirements.txt
# python3 -m pip install --user -r requirements.txt
# python3 -m pytest ./tests/test_core.py
- name: Unitary tests
run: |
python ./unitest.py

View File

@ -1,40 +0,0 @@
name: webui
on:
workflow_call:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v5
- name: Glances will be build with Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v5
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: ./glances/outputs/static/package-lock.json
- name: Build Glances WebUI
working-directory: ./glances/outputs/static
# TODO: add the following line when https://github.com/nicolargo/glances/issues/2914 will be solved
# npm audit fix
run: |
npm ci
npm run build
- name: Commit and push WebUI
env:
CI_COMMIT_MESSAGE: Continuous Integration Build Artifacts
CI_COMMIT_AUTHOR: Continuous Integration
run: |
git config --global user.name "${{ env.CI_COMMIT_AUTHOR }}"
git config --global user.email "username@users.noreply.github.com"
git add glances/outputs/static
/bin/bash -c "git commit -m '${{ env.CI_COMMIT_MESSAGE }}' || true"
git push

13
.gitignore vendored
View File

@ -23,11 +23,9 @@ local.properties
.classpath
.settings/
.loadpath
.ipynb_checkpoints/
# External tool builders
.externalToolBuilders/
*yarn.lock
# Locally stored "Eclipse launch configurations"
*.launch
@ -64,14 +62,5 @@ bower_components/
/*_source.tar.bz2
# Virtual env
.venv-uv/
.venv/
uv.lock
.python-version
/venv/
# Test
.coverage
tests-data/issues/*/config/
# Local SSL certificates
glances.local*.pem

View File

@ -1,107 +0,0 @@
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.24.2
hooks:
- id: gitleaks
name: "🔒 security · Detect hardcoded secrets"
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.14.10
hooks:
- id: ruff-format
name: "🐍 python · Formatter with Ruff"
types_or: [ python, pyi ]
args: [ --config, './pyproject.toml' ]
- id: ruff-check
name: "🐍 python · Linter with Ruff"
types_or: [ python, pyi ]
args: [ --fix, --exit-non-zero-on-fix, --config, './pyproject.toml' ]
# - repo: https://github.com/RobertCraigie/pyright-python
# rev: v1.1.391
# hooks:
# - id: pyright
# name: "🐍 python · Check types"
# - repo: https://github.com/biomejs/pre-commit
# rev: "v2.3.7"
# hooks:
# - id: biome-check
# name: "🟨 javascript · Lint, format, and safe fixes with Biome"
- repo: https://github.com/python-jsonschema/check-jsonschema
rev: 0.35.0
hooks:
- id: check-github-workflows
name: "🐙 github-actions · Validate gh workflow files"
args: ["--verbose"]
- repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.11.0.1
hooks:
- id: shellcheck
name: "🐚 shell · Lint shell scripts"
- repo: https://github.com/openstack/bashate
rev: 2.1.1
hooks:
- id: bashate
name: "🐚 shell · Check shell script code style"
entry: bashate --error . --ignore=E006
# - repo: https://github.com/mrtazz/checkmake.git
# rev: 0.2.2
# hooks:
# - id: checkmake
# name: "🐮 Makefile · Lint Makefile"
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
- id: check-executables-have-shebangs
name: "📁 filesystem/⚙️ exec · Verify shebang presence"
- id: check-shebang-scripts-are-executable
name: "📁 filesystem/⚙️ exec · Verify script permissions"
- id: check-case-conflict
name: "📁 filesystem/📝 names · Check case sensitivity"
- id: destroyed-symlinks
name: "📁 filesystem/🔗 symlink · Detect broken symlinks"
- id: check-merge-conflict
name: "🌳 git · Detect conflict markers"
- id: forbid-new-submodules
name: "🌳 git · Prevent submodule creation"
- id: no-commit-to-branch
name: "🌳 git · Protect main branches"
args: ["--branch", "main", "--branch", "master"]
- id: check-added-large-files
name: "🌳 git · Block large file commits"
args: ['--maxkb=5000']
- id: check-ast
name: "🐍 python/🔍 quality · Validate Python AST"
- id: check-docstring-first
name: "🐍 python/📝 style · Enforce docstring at top"
- id: check-json
name: "📄 formats/json · Validate JSON files"
- id: check-shebang-scripts-are-executable
name: "📁 filesystem/⚙️ exec · Ensure scripts are executable"
- id: check-toml
name: "📄 formats/toml · Validate TOML files"
- id: check-yaml
name: "📄 formats/yaml · Validate YAML syntax"
- id: debug-statements
name: "🐍 python/🪲 debug · Detect debug statements"
- id: detect-private-key
name: "🔐 security · Detect private keys"
- id: mixed-line-ending
name: "📄 text/↩️ newline · Normalize line endings"
- id: requirements-txt-fixer
name: "🐍 python/📦 deps · Sort requirements.txt"
- repo: local
hooks:
- id: find-duplicate-lines
name: "❗local script · Find duplicate lines at the end of file"
entry: bash tests-data/tools/find-duplicate-lines.sh
language: system
types: [python]
pass_filenames: false

View File

@ -1,34 +0,0 @@
# Read the Docs configuration file for Glances projects
# Required
version: 2
# Set the OS, Python version and other tools you might need
build:
os: ubuntu-22.04
tools:
python: "3.12"
# You can also specify other tool versions:
# nodejs: "20"
# rust: "1.70"
# golang: "1.20"
# Build documentation in the "docs/" directory with Sphinx
sphinx:
configuration: docs/conf.py
# You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs
# builder: "dirhtml"
# Fail on all warnings to avoid broken references
# fail_on_warning: true
# Optionally build your docs in additional formats such as PDF and ePub
# formats:
# - pdf
# - epub
# Optional but recommended, declare the Python requirements required
# to build your documentation
# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
python:
install:
- requirements: dev-requirements.txt

13
AUTHORS
View File

@ -10,12 +10,6 @@ nicolashennion@gmail.com
PGP Fingerprint: A0D9 628F 5A83 A879 48EA B1FE BA43 C11F 2C8B 4347
PGP Public key: gpg --keyserver pgp.mit.edu --recv-keys 0xba43c11f2c8b4347
RazCrimson (maintainer of the Glances project)
https://github.com/RazCrimson
Ariel Otibili (aka) ariel-anieli (for the huge work on code quality)
https://github.com/ariel-anieli
Alessio Sergi (aka) Al3hex (thanks you for the great job on this project)
https://twitter.com/al3hex
https://github.com/asergi
@ -23,9 +17,6 @@ https://github.com/asergi
Floran Brutel (aka) notFloran (maintainer of the Web User Interface)
https://github.com/notFloran
fr4nc0is (maintainer of the Web User Interface)
https://github.com/fr4nc0is
Brandon Philips (aka) Philips
http://ifup.org/
https://github.com/philips
@ -67,7 +58,3 @@ http://www.macports.org/ports.php?by=name&substr=glances
John Kirkham for the conda package (at conda-forge)
https://github.com/conda-forge/glances-feedstock
Rui Chen for the Homebrew package
https://chenrui.dev/
https://formulae.brew.sh/formula/glances

View File

@ -6,7 +6,7 @@ In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
education, socioeconomic status, nationality, personal appearance, race,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.
## Our Standards

View File

@ -10,6 +10,7 @@ the developers managing and developing this open source project. In return,
they should reciprocate that respect in addressing your issue or assessing
patches and features.
## Using the issue tracker
The [issue tracker](https://github.com/nicolargo/glances/issues) is
@ -23,6 +24,7 @@ restrictions:
* Please **do not** derail or troll issues. Keep the discussion on topic and
respect the opinions of others.
## Bug reports
A bug is a _demonstrable problem_ that is caused by the code in the repository.
@ -63,17 +65,19 @@ Example:
> causing the bug, and potential solutions (and your opinions on their
> merits).
>
> You can also run Glances in debug mode (-d) and paste/bin the glances.conf file (<https://glances.readthedocs.io/en/latest/config.html>).
> You can also run Glances in debug mode (-d) and paste/bin the glances.conf file (https://glances.readthedocs.io/en/latest/config.html).
>
> Glances 3.2.0 or higher have also a --issue option to run a simple test. Please use it and copy/paste the output.
## Feature requests
Feature requests are welcome. But take a moment to find out whether your idea
fits with the scope and aims of the project. It's up to _you* to make a strong
fits with the scope and aims of the project. It's up to *you* to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
## Pull requests
Good pull requests—patches, improvements, new features—are a fantastic
@ -129,7 +133,6 @@ included in the project:
5. Test you code using the Makefile:
* make format ==> Format your code thanks to the Ruff linter
* make run ==> Run Glances
* make run-webserver ==> Run a Glances Web Server
* make test ==> Run unit tests

View File

@ -3,12 +3,7 @@ include CONTRIBUTING.md
include COPYING
include NEWS.rst
include README.rst
include README-pypi.rst
include SECURITY.md
include conf/glances.conf
include conf/fetch-templates/*.jinja
include requirements.txt
include all-requirements.txt
recursive-include docs *
recursive-include glances *.py
recursive-include glances/outputs/static *

395
Makefile
View File

@ -1,387 +1,206 @@
PORT ?= 8008
CONF := conf/glances.conf
LASTTAG = $(shell git describe --tags --abbrev=0)
IMAGES_TYPES := full minimal
DISTROS := alpine ubuntu
alpine_images := $(IMAGES_TYPES:%=docker-alpine-%)
ubuntu_images := $(IMAGES_TYPES:%=docker-ubuntu-%)
DOCKER_IMAGES := $(alpine_images) $(ubuntu_images)
DOCKER_RUNTIMES := $(DOCKER_IMAGES:%=run-%)
UNIT_TESTS := test-core test-restful test-xmlrpc
DOCKER_BUILD := docker buildx build
DOCKER_RUN := docker run
PODMAN_SOCK ?= /run/user/$(shell id -u)/podman/podman.sock
DOCKER_SOCK ?= /var/run/docker.sock
DOCKER_SOCKS := -v $(PODMAN_SOCK):$(PODMAN_SOCK):ro -v $(DOCKER_SOCK):$(DOCKER_SOCK):ro
DOCKER_OPTS := --rm -e TZ="${TZ}" -e GLANCES_OPT="" --pid host --network host
UV_RUN := .venv-uv/bin/uv
PORT?=8008
LASTTAG = $(shell git describe --tags --abbrev=0)
# if the command is only `make`, the default tasks will be the printing of the help.
.DEFAULT_GOAL := help
.PHONY: help test docs docs-server venv requirements profiling docker all clean all test
.PHONY: help
help: ## List all make commands available
@grep -E '^[\.a-zA-Z_%-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk -F ":" '{print $1}' | \
grep -v % | sed 's/\\//g' | sort | \
awk 'BEGIN {FS = ":[^:]*?##"}; {printf "\033[1;34mmake %-50s\033[0m %s\n", $$1, $$2}'
@grep -E '^[\.a-zA-Z_%-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk -F ":" '{print $1}' | grep -v % | sed 's/\\//g' | sort | awk 'BEGIN {FS = ":[^:]*?##"}; {printf "\033[1;34mmake %-50s\033[0m %s\n", $$1, $$2}'
# ===================================================================
# Virtualenv
# ===================================================================
install: ## Open a Web Browser to the installation procedure
sensible-browser "https://github.com/nicolargo/glances#installation"
# install-uv: ## Instructions to install the UV tool
# @echo "Install the UV tool (https://astral.sh/uv/)"
# @echo "Please install the UV tool manually"
# @echo "For example with: curl -LsSf https://astral.sh/uv/install.sh | sh"
# @echo "Or via a package manager of your distribution"
# @echo "For example for Snap: snap install astral-uv"
venv-python: ## Install Python 3 venv
virtualenv -p /usr/bin/python3 venv
install-uv: ## Install UV tool in a specific virtualenv
python3 -m venv .venv-uv
.venv-uv/bin/pip install uv
venv-dev: venv-python ## Install Python 3 dev dependencies
./venv/bin/pip install -r dev-requirements.txt
./venv/bin/pip install -r doc-requirements.txt
upgrade-uv: ## Upgrade the UV tool
.venv-uv/bin/pip install --upgrade pip
.venv-uv/bin/pip install --upgrade uv
venv-dev-upgrade: ## Upgrade Python 3 dev dependencies
./venv/bin/pip install --upgrade pip
./venv/bin/pip install --upgrade -r dev-requirements.txt
./venv/bin/pip install --upgrade -r doc-requirements.txt
venv: ## Create the virtualenv with all dependencies
$(UV_RUN) sync --all-extras --no-group dev
venv: venv-python ## Install Python 3 run-time dependencies
./venv/bin/pip install -r requirements.txt
./venv/bin/pip install -r optional-requirements.txt
venv-upgrade venv-switch-to-full: ## Upgrade the virtualenv with all dependencies
$(UV_RUN) sync --upgrade --all-extras
venv-min: ## Create the virtualenv with minimal dependencies
$(UV_RUN) sync
venv-upgrade-min venv-switch-to-min: ## Upgrade the virtualenv with minimal dependencies
$(UV_RUN) sync --upgrade
venv-clean: ## Remove the virtualenv
rm -rf .venv
venv-dev: ## Create the virtualenv with dev dependencies
$(UV_RUN) sync --dev --all-extras
$(UV_RUN) run pre-commit install --hook-type pre-commit
# ===================================================================
# Requirements
#
# Note: the --no-hashes option should be used because pip (in CI) has
# issues with hashes.
# ===================================================================
requirements-min: ## Generate the requirements.txt files (minimal dependencies)
$(UV_RUN) export --no-emit-workspace --no-hashes --no-group dev --output-file requirements.txt
requirements-all: ## Generate the all-requirements.txt files (all dependencies)
$(UV_RUN) export --no-emit-workspace --no-hashes --all-extras --no-group dev --output-file all-requirements.txt
requirements-docker: ## Generate the docker-requirements.txt files (Docker specific dependencies)
$(UV_RUN) export --no-emit-workspace --no-hashes --no-group dev --extra containers --extra web --output-file docker-requirements.txt
requirements-dev: ## Generate the dev-requirements.txt files (dev dependencies)
$(UV_RUN) export --no-hashes --only-dev --output-file dev-requirements.txt
requirements: requirements-min requirements-all requirements-dev requirements-docker ## Generate all the requirements files
requirements-upgrade: venv-upgrade requirements ## Upgrade the virtualenv and regenerate all the requirements files
venv-upgrade: ## Upgrade Python 3 run-time dependencies
./venv/bin/pip install --upgrade -r requirements.txt
./venv/bin/pip install --upgrade -r optional-requirements.txt
# ===================================================================
# Tests
# ===================================================================
test: ## Run All unit tests
$(UV_RUN) run pytest
test: ## Run unit tests
./venv/bin/python ./unitest.py
./venv/bin/python ./unitest-restful.py
./venv/bin/python ./unitest-xmlrpc.py
./venv/bin/python -m black ./glances --check --exclude outputs/static
# ./venv/bin/pyright glances
test-core: ## Run Core unit tests
$(UV_RUN) run pytest tests/test_core.py
test-api: ## Run API unit tests
$(UV_RUN) run pytest tests/test_api.py
test-memoryleak: ## Run Memory-leak unit tests
$(UV_RUN) run pytest tests/test_memoryleak.py
test-perf: ## Run Perf unit tests
$(UV_RUN) run pytest tests/test_perf.py
test-restful: ## Run Restful API unit tests
$(UV_RUN) run pytest tests/test_restful.py
test-webui: ## Run WebUI unit tests
$(UV_RUN) run pytest tests/test_webui.py
test-xmlrpc: ## Run XMLRPC API unit tests
$(UV_RUN) run pytest tests/test_xmlrpc.py
test-with-upgrade: venv-upgrade test ## Upgrade deps and run unit tests
test-export-csv: ## Run interface tests with CSV
/bin/bash ./tests/test_export_csv.sh
test-export-json: ## Run interface tests with JSON
/bin/bash ./tests/test_export_json.sh
test-export-influxdb-v1: ## Run interface tests with InfluxDB version 1 (Legacy)
/bin/bash ./tests/test_export_influxdb_v1.sh
test-export-influxdb-v3: ## Run interface tests with InfluxDB version 3 (Core)
/bin/bash ./tests/test_export_influxdb_v3.sh
test-export-timescaledb: ## Run interface tests with TimescaleDB
/bin/bash ./tests/test_export_timescaledb.sh
test-export-nats: ## Run interface tests with NATS
/bin/bash ./tests/test_export_nats.sh
test-exports: test-export-csv test-export-json test-export-influxdb-v1 test-export-influxdb-v3 test-export-timescaledb test-export-nats ## Tests all exports
test-with-upgrade: venv-upgrade venv-dev-upgrade ## Run unit tests
./venv/bin/python ./unitest.py
./venv/bin/python ./unitest-restful.py
./venv/bin/python ./unitest-xmlrpc.py
./venv/bin/python -m black ./glances --check --exclude outputs/static
# ./venv/bin/pyright glances
# ===================================================================
# Linters, profilers and cyber security
# Linters and profilers
# ===================================================================
pre-commit: ## Run pre-commit hooks
$(UV_RUN) run pre-commit run --all-files
format: venv-dev-upgrade ## Format the code
@git ls-files './glances/*.py' | xargs ./venv/bin/python -m autopep8 --in-place --jobs 0 --global-config=.flake8
@git ls-files './glances/*.py' | xargs ./venv/bin/python -m autoflake --in-place --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys --exclude="compat.py,globals.py"
./venv/bin/python -m black ./glances --exclude outputs/static
find-duplicate-lines: ## Search for duplicate lines in files
/bin/bash tests-data/tools/find-duplicate-lines.sh
flake8: venv-dev-upgrade ## Run flake8 linter.
@git ls-files '*.py' | xargs ./venv/bin/python -m flake8 --config=.flake8
format: ## Format the code
$(UV_RUN) run ruff format .
ruff: venv-dev-upgrade ## Run Ruff (fastest) linter.
./venv/bin/python -m ruff check . --config=./pyproject.toml
lint: ## Lint the code.
$(UV_RUN) run ruff check . --fix
codespell: venv-dev-upgrade ## Run codespell to fix common misspellings in text files
./venv/bin/codespell -S .git,./docs/_build,./Glances.egg-info,./venv,./glances/outputs,*.svg -L hart,bu,te,statics
lint-readme: ## Lint the main README.rst file
$(UV_RUN) run rstcheck README.rst
$(UV_RUN) run rstcheck README-pypi.rst
semgrep: venv-dev-upgrade ## Run semgrep to find bugs and enforce code standards
./venv/bin/semgrep --config=auto --lang python --use-git-ignore ./glances
codespell: ## Run codespell to fix common misspellings in text files
$(UV_RUN) run codespell -S .git,./docs/_build,./Glances.egg-info,./venv*,./glances/outputs,*.svg -L hart,bu,te,statics -w
semgrep: ## Run semgrep to find bugs and enforce code standards
$(UV_RUN) run semgrep scan --config=auto
profiling-%: SLEEP = 3
profiling-%: TIMES = 30
profiling-%: OUT_DIR = docs/_static
define DISPLAY-BANNER
@echo "Start Glances for $(TIMES) iterations (more or less 1 mins, please do not exit !)"
sleep $(SLEEP)
endef
profiling-gprof: CPROF = glances.cprof
profiling-gprof: ## Callgraph profiling (need "apt install graphviz")
$(DISPLAY-BANNER)
$(UV_RUN) run python -m cProfile -o $(CPROF) run-venv.py -C $(CONF) --stop-after $(TIMES)
$(UV_RUN) run gprof2dot -f pstats $(CPROF) | dot -Tsvg -o $(OUT_DIR)/glances-cgraph.svg
rm -f $(CPROF)
profiling-pyinstrument: ## PyInstrument profiling
$(DISPLAY-BANNER)
$(UV_RUN) add pyinstrument
$(UV_RUN) run pyinstrument -r html -o $(OUT_DIR)/glances-pyinstrument.html -m glances -C $(CONF) --stop-after $(TIMES)
profiling-pyspy: ## Flame profiling
$(DISPLAY-BANNER)
$(UV_RUN) run py-spy record -o $(OUT_DIR)/glances-flame.svg -d 60 -s -- .venv-uv/bin/uvrun python run-venv.py -C $(CONF) --stop-after $(TIMES)
profiling: profiling-gprof profiling-pyinstrument profiling-pyspy ## Profiling of the Glances software
profiling: ## How to start the profiling of the Glances software
@echo "Please complete and run: sudo ./venv/bin/py-spy record -o ./docs/_static/glances-flame.svg -d 60 -s --pid <GLANCES PID>"
trace-malloc: ## Trace the malloc() calls
@echo "Malloc test is running, please wait ~30 secondes..."
$(UV_RUN) run python -m glances -C $(CONF) --trace-malloc --stop-after 15 --quiet
./venv/bin/python -m glances -C ./conf/glances.conf --trace-malloc --stop-after 15 --quiet
memory-leak: ## Profile memory leaks
$(UV_RUN) run python -m glances -C $(CONF) --memory-leak
./venv/bin/python -m glances -C ./conf/glances.conf --memory-leak
memory-profiling: TIMES = 2400
memory-profiling: PROFILE = mprofile_*.dat
memory-profiling: OUT_DIR = docs/_static
memory-profiling: ## Profile memory usage
@echo "It's a very long test (~4 hours)..."
rm -f $(PROFILE)
rm -f mprofile_*.dat
@echo "1/2 - Start memory profiling with the history option enable"
$(UV_RUN) run mprof run -T 1 -C run-venv.py -C $(CONF) --stop-after $(TIMES) --quiet
$(UV_RUN) run mprof plot --output $(OUT_DIR)/glances-memory-profiling-with-history.png
rm -f $(PROFILE)
./venv/bin/mprof run -T 1 -C run.py -C ./conf/glances.conf --stop-after 2400 --quiet
./venv/bin/mprof plot --output ./docs/_static/glances-memory-profiling-with-history.png
rm -f mprofile_*.dat
@echo "2/2 - Start memory profiling with the history option disable"
$(UV_RUN) run mprof run -T 1 -C run-venv.py -C $(CONF) --disable-history --stop-after $(TIMES) --quiet
$(UV_RUN) run mprof plot --output $(OUT_DIR)/glances-memory-profiling-without-history.png
rm -f $(PROFILE)
# Trivy installation: https://aquasecurity.github.io/trivy/latest/getting-started/installation/
trivy: ## Run Trivy to find vulnerabilities
$(UV_RUN) run trivy fs ./glances/
bandit: ## Run Bandit to find vulnerabilities
$(UV_RUN) run bandit glances -r
./venv/bin/mprof run -T 1 -C run.py -C ./conf/glances.conf --disable-history --stop-after 2400 --quiet
./venv/bin/mprof plot --output ./docs/_static/glances-memory-profiling-without-history.png
rm -f mprofile_*.dat
# ===================================================================
# Docs
# ===================================================================
docs: ## Create the documentation
$(UV_RUN) run python -m glances -C $(CONF) --api-doc > ./docs/api/python.rst
$(UV_RUN) run python ./generate_openapi.py
$(UV_RUN) run python -m glances -C $(CONF) --api-restful-doc > ./docs/api/restful.rst
docs: venv-dev-upgrade ## Create the documentation
./venv/bin/python -m glances -C ./conf/glances.conf --api-doc > ./docs/api.rst
cd docs && ./build.sh && cd ..
docs-server: docs ## Start a Web server to serve the documentation
(sleep 2 && sensible-browser "http://localhost:$(PORT)") &
cd docs/_build/html/ && .venv-uv/bin/uvrun python -m http.server $(PORT)
docs-jupyter: ## Start Jupyter Notebook
$(UV_RUN) run --with jupyter jupyter lab
cd docs/_build/html/ && ../../../venv/bin/python -m http.server $(PORT)
release-note: ## Generate release note
git --no-pager log $(LASTTAG)..HEAD --first-parent --pretty=format:"* %s"
@echo "\n"
git --no-pager shortlog -s -n $(LASTTAG)..HEAD
install: ## Open a Web Browser to the installation procedure
sensible-browser "https://github.com/nicolargo/glances#installation"
# ===================================================================
# WebUI
# Follow ./glances/outputs/static/README.md for more information
# ===================================================================
webui webui%: DIR = glances/outputs/static/
webui: venv-dev-upgrade ## Build the Web UI
cd glances/outputs/static/ && npm ci && npm run build
webui-gen-config: ## Generate the Web UI config file
$(UV_RUN) run python ./generate_webui_conf.py > ./glances/outputs/static/js/uiconfig.json
webui-audit: venv-dev-upgrade ## Audit the Web UI
cd glances/outputs/static/ && npm audit
webui: webui-gen-config ## Build the Web UI
cd $(DIR) && npm ci && npm run build
webui-audit: ## Audit the Web UI
cd $(DIR) && npm audit
webui-audit-fix: webui-gen-config ## Fix audit the Web UI
cd $(DIR) && npm audit fix && npm ci && npm run build
webui-update: webui-gen-config ## Update JS dependencies
cd $(DIR) && npm update --save && npm ci && npm run build
webui-audit-fix: venv-dev-upgrade ## Fix audit the Web UI
cd glances/outputs/static/ && npm audit fix && npm ci && npm run build
# ===================================================================
# Packaging
# ===================================================================
flatpak: venv-upgrade ## Generate FlatPack JSON file
flatpak: venv-dev-upgrade ## Generate FlatPack JSON file
git clone https://github.com/flatpak/flatpak-builder-tools.git
$(UV_RUN) run python ./flatpak-builder-tools/pip/flatpak-pip-generator glances
./venv/bin/python ./flatpak-builder-tools/pip/flatpak-pip-generator glances
rm -rf ./flatpak-builder-tools
@echo "Now follow: https://github.com/flathub/flathub/wiki/App-Submission"
# Snap package is automatically build on the Snapcraft.io platform
# https://snapcraft.io/glances
# But you can try an offline build with the following command
snapcraft:
snapcraft
# ===================================================================
# Docker
# Need Docker Buildx package (apt install docker-buildx on Ubuntu)
# ===================================================================
define MAKE_DOCKER_BUILD_RULES
$($(DISTRO)_images): docker-$(DISTRO)-%: docker-files/$(DISTRO).Dockerfile
$(DOCKER_BUILD) --target $$* -f $$< -t glances:local-$(DISTRO)-$$* .
endef
docker: docker-alpine docker-ubuntu## Generate local docker images
$(foreach DISTRO,$(DISTROS),$(eval $(MAKE_DOCKER_BUILD_RULES)))
docker-alpine: ## Generate local docker images (Alpine)
docker build --target full -f ./docker-files/alpine.Dockerfile -t glances:local-alpine-full .
docker build --target minimal -f ./docker-files/alpine.Dockerfile -t glances:local-alpine-minimal .
docker build --target dev -f ./docker-files/alpine.Dockerfile -t glances:local-alpine-dev .
docker: docker-alpine docker-ubuntu ## Generate local docker images
docker-alpine: $(alpine_images) ## Generate local docker images (Alpine)
docker-ubuntu: $(ubuntu_images) ## Generate local docker images (Ubuntu)
docker-alpine-full: ## Generate local docker image (Alpine full)
docker-alpine-minimal: ## Generate local docker image (Alpine minimal)
docker-alpine-dev: ## Generate local docker image (Alpine dev)
docker-ubuntu-full: ## Generate local docker image (Ubuntu full)
docker-ubuntu-minimal: ## Generate local docker image (Ubuntu minimal)
docker-ubuntu-dev: ## Generate local docker image (Ubuntu dev)
trivy-docker: ## Run Trivy to find vulnerabilities in Docker images
$(UV_RUN) run trivy image glances:local-alpine-full
$(UV_RUN) run trivy image glances:local-alpine-minimal
$(UV_RUN) run trivy image glances:local-ubuntu-full
$(UV_RUN) run trivy image glances:local-ubuntu-minimal
docker-ubuntu: ## Generate local docker images (Ubuntu)
docker build --target full -f ./docker-files/ubuntu.Dockerfile -t glances:local-ubuntu-full .
docker build --target minimal -f ./docker-files/ubuntu.Dockerfile -t glances:local-ubuntu-minimal .
docker build --target dev -f ./docker-files/ubuntu.Dockerfile -t glances:local-ubuntu-dev .
# ===================================================================
# Run
# ===================================================================
run: ## Start Glances in console mode (also called standalone)
$(UV_RUN) run python -m glances -C $(CONF)
./venv/bin/python -m glances -C ./conf/glances.conf
run-debug: ## Start Glances in debug console mode (also called standalone)
$(UV_RUN) run python -m glances -C $(CONF) -d
./venv/bin/python -m glances -C ./conf/glances.conf -d
run-local-conf: ## Start Glances in console mode with the system conf file
$(UV_RUN) run python -m glances
run-local-conf-hide-public: ## Start Glances in console mode with the system conf file and hide public information
$(UV_RUN) run python -m glances --hide-public-info
run-like-htop: ## Start Glances with the same features than Htop
$(UV_RUN) run python -m glances --disable-plugin network,ports,wifi,connections,diskio,fs,irq,folders,raid,smart,sensors,vms,containers,ip,amps --disable-left-sidebar
run-fetch: ## Start Glances in fetch mode
$(UV_RUN) run python -m glances --fetch
$(DOCKER_RUNTIMES): run-docker-%:
$(DOCKER_RUN) $(DOCKER_OPTS) $(DOCKER_SOCKS) -it glances:local-$*
./venv/bin/python -m glances
run-docker-alpine-minimal: ## Start Glances Alpine Docker minimal in console mode
run-docker-alpine-full: ## Start Glances Alpine Docker full in console mode
run-docker-alpine-dev: ## Start Glances Alpine Docker dev in console mode
run-docker-ubuntu-minimal: ## Start Glances Ubuntu Docker minimal in console mode
run-docker-ubuntu-full: ## Start Glances Ubuntu Docker full in console mode
run-docker-ubuntu-dev: ## Start Glances Ubuntu Docker dev in console mode
docker run --rm -e TZ="${TZ}" -e GLANCES_OPT="" -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it glances:local-alpine-minimal
generate-ssl: ## Generate local and sel signed SSL certificates for dev (need mkcert)
mkcert glances.local localhost 120.0.0.1 0.0.0.0
run-docker-alpine-full: ## Start Glances Alpine Docker full in console mode
docker run --rm -e TZ="${TZ}" -e GLANCES_OPT="" -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it glances:local-alpine-full
run-docker-alpine-dev: ## Start Glances Alpine Docker dev in console mode
docker run --rm -e TZ="${TZ}" -e GLANCES_OPT="" -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it glances:local-alpine-dev
run-docker-ubuntu-minimal: ## Start Glances Ubuntu Docker minimal in console mode
docker run --rm -e TZ="${TZ}" -e GLANCES_OPT="" -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it glances:local-ubuntu-minimal
run-docker-ubuntu-full: ## Start Glances Ubuntu Docker full in console mode
docker run --rm -e TZ="${TZ}" -e GLANCES_OPT="" -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it glances:local-ubuntu-full
run-docker-ubuntu-dev: ## Start Glances Ubuntu Docker dev in console mode
docker run --rm -e TZ="${TZ}" -e GLANCES_OPT="" -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it glances:local-ubuntu-dev
run-webserver: ## Start Glances in Web server mode
$(UV_RUN) run python -m glances -C $(CONF) -w
run-webserver-local-conf: ## Start Glances in Web server mode with the system conf file
$(UV_RUN) run python -m glances -w
run-webserver-local-conf-hide-public: ## Start Glances in Web server mode with the system conf file and hide public info
$(UV_RUN) run python -m glances -w --hide-public-info
./venv/bin/python -m glances -C ./conf/glances.conf -w
run-restapiserver: ## Start Glances in REST API server mode
$(UV_RUN) run python -m glances -C $(CONF) -w --disable-webui
./venv/bin/python -m glances -C ./conf/glances.conf -w --disable-webui
run-server: ## Start Glances in server mode (RPC)
$(UV_RUN) run python -m glances -C $(CONF) -s
./venv/bin/python -m glances -C ./conf/glances.conf -s
run-client: ## Start Glances in client mode (RPC)
$(UV_RUN) run python -m glances -C $(CONF) -c localhost
./venv/bin/python -m glances -C ./conf/glances.conf -c localhost
run-browser: ## Start Glances in browser mode (RPC)
$(UV_RUN) run python -m glances -C $(CONF) --browser
run-web-browser: ## Start Web Central Browser
$(UV_RUN) run python -m glances -C $(CONF) -w --browser
./venv/bin/python -m glances -C ./conf/glances.conf --browser
run-issue: ## Start Glances in issue mode
$(UV_RUN) run python -m glances -C $(CONF) --issue
run-multipass: ## Install and start Glances in a VM (only available on Ubuntu with multipass already installed)
multipass launch -n glances-on-lts lts
multipass exec glances-on-lts -- sudo snap install glances
multipass exec glances-on-lts -- glances
multipass stop glances-on-lts
multipass delete glances-on-lts
./venv/bin/python -m glances -C ./conf/glances.conf --issue
show-version: ## Show Glances version number
$(UV_RUN) run python -m glances -C $(CONF) -V
./venv/bin/python -m glances -C ./conf/glances.conf -V
show-issue: ## Generate output for a new issue
./venv/bin/python -m glances -C ./conf/glances.conf --issue
.PHONY: test docs docs-server venv

2464
NEWS.rst

File diff suppressed because it is too large Load Diff

View File

@ -1,385 +0,0 @@
Glances 🌟
==========
**Glances** is an open-source system cross-platform monitoring tool.
It allows real-time monitoring of various aspects of your system such as
CPU, memory, disk, network usage etc. It also allows monitoring of running processes,
logged in users, temperatures, voltages, fan speeds etc.
It also supports container monitoring, it supports different container management
systems such as Docker, LXC. The information is presented in an easy to read dashboard
and can also be used for remote monitoring of systems via a web interface or command
line interface. It is easy to install and use and can be customized to show only
the information that you are interested in.
In client/server mode, remote monitoring could be done via terminal,
Web interface or API (XML-RPC and RESTful).
Stats can also be exported to files or external time/value databases, CSV or direct
output to STDOUT.
Glances is written in Python and uses libraries to grab information from
your system. It is based on an open architecture where developers can
add new plugins or exports modules.
Usage 👋
========
For the standalone mode, just run:
.. code-block:: console
$ glances
.. image:: https://github.com/nicolargo/glances/raw/refs/heads/master/docs/_static/glances-responsive-webdesign.png
For the Web server mode, run:
.. code-block:: console
$ glances -w
and enter the URL ``http://<ip>:61208`` in your favorite web browser.
In this mode, a HTTP/Restful API is exposed, see document `RestfulApi`_ for more details.
.. image:: https://github.com/nicolargo/glances/raw/refs/heads/master/docs/_static/screenshot-web.png
For the client/server mode (remote monitoring through XML-RPC), run the following command on the server:
.. code-block:: console
$ glances -s
and this one on the client:
.. code-block:: console
$ glances -c <ip>
You can also detect and display all Glances servers available on your
network (or defined in the configuration file) in TUI:
.. code-block:: console
$ glances --browser
or WebUI:
.. code-block:: console
$ glances -w --browser
It possible to display raw stats on stdout:
.. code-block:: console
$ glances --stdout cpu.user,mem.used,load
cpu.user: 30.7
mem.used: 3278204928
load: {'cpucore': 4, 'min1': 0.21, 'min5': 0.4, 'min15': 0.27}
cpu.user: 3.4
mem.used: 3275251712
load: {'cpucore': 4, 'min1': 0.19, 'min5': 0.39, 'min15': 0.27}
...
or in a CSV format thanks to the stdout-csv option:
.. code-block:: console
$ glances --stdout-csv now,cpu.user,mem.used,load
now,cpu.user,mem.used,load.cpucore,load.min1,load.min5,load.min15
2018-12-08 22:04:20 CEST,7.3,5948149760,4,1.04,0.99,1.04
2018-12-08 22:04:23 CEST,5.4,5949136896,4,1.04,0.99,1.04
...
or in a JSON format thanks to the stdout-json option (attribute not supported in this mode in order to have a real JSON object in output):
.. code-block:: console
$ glances --stdout-json cpu,mem
cpu: {"total": 29.0, "user": 24.7, "nice": 0.0, "system": 3.8, "idle": 71.4, "iowait": 0.0, "irq": 0.0, "softirq": 0.0, "steal": 0.0, "guest": 0.0, "guest_nice": 0.0, "time_since_update": 1, "cpucore": 4, "ctx_switches": 0, "interrupts": 0, "soft_interrupts": 0, "syscalls": 0}
mem: {"total": 7837949952, "available": 2919079936, "percent": 62.8, "used": 4918870016, "free": 2919079936, "active": 2841214976, "inactive": 3340550144, "buffers": 546799616, "cached": 3068141568, "shared": 788156416}
...
Last but not least, you can use the fetch mode to get a quick look of a machine:
.. code-block:: console
$ glances --fetch
Results look like this:
.. image:: https://github.com/nicolargo/glances/raw/refs/heads/master/docs/_static/screenshot-fetch.png
Use Glances as a Python library 📚
==================================
You can access the Glances API by importing the `glances.api` module and creating an
instance of the `GlancesAPI` class. This instance provides access to all Glances plugins
and their fields. For example, to access the CPU plugin and its total field, you can
use the following code:
.. code-block:: python
>>> from glances import api
>>> gl = api.GlancesAPI()
>>> gl.cpu
{'cpucore': 16,
'ctx_switches': 1214157811,
'guest': 0.0,
'idle': 91.4,
'interrupts': 991768733,
'iowait': 0.3,
'irq': 0.0,
'nice': 0.0,
'soft_interrupts': 423297898,
'steal': 0.0,
'syscalls': 0,
'system': 5.4,
'total': 7.3,
'user': 3.0}
>>> gl.cpu["total"]
7.3
>>> gl.mem["used"]
12498582144
>>> gl.auto_unit(gl.mem["used"])
11.6G
If the stats return a list of items (like network interfaces or processes), you can
access them by their name:
.. code-block:: python
>>> gl.network.keys()
['wlp0s20f3', 'veth33b370c', 'veth19c7711']
>>> gl.network["wlp0s20f3"]
{'alias': None,
'bytes_all': 362,
'bytes_all_gauge': 9242285709,
'bytes_all_rate_per_sec': 1032.0,
'bytes_recv': 210,
'bytes_recv_gauge': 7420522678,
'bytes_recv_rate_per_sec': 599.0,
'bytes_sent': 152,
'bytes_sent_gauge': 1821763031,
'bytes_sent_rate_per_sec': 433.0,
'interface_name': 'wlp0s20f3',
'key': 'interface_name',
'speed': 0,
'time_since_update': 0.3504955768585205}
For a complete example of how to use Glances as a library, have a look to the `PythonApi`_.
Documentation 📜
================
For complete documentation have a look at the readthedocs_ website.
If you have any question (after RTFM! and the `FAQ`_), please post it on the official Reddit `forum`_ or in GitHub `Discussions`_.
Gateway to other services 🌐
============================
Glances can export stats to:
- ``CSV`` file
- ``JSON`` file
- ``InfluxDB`` server
- ``Cassandra`` server
- ``CouchDB`` server
- ``OpenTSDB`` server
- ``Prometheus`` server
- ``StatsD`` server
- ``ElasticSearch`` server
- ``PostgreSQL/TimeScale`` server
- ``RabbitMQ/ActiveMQ`` broker
- ``ZeroMQ`` broker
- ``Kafka`` broker
- ``Riemann`` server
- ``Graphite`` server
- ``RESTful`` endpoint
Installation 🚀
===============
There are several methods to test/install Glances on your system. Choose your weapon!
PyPI: Pip, the standard way
---------------------------
Glances is on ``PyPI``. By using PyPI, you will be using the latest stable version.
To install Glances, simply use the ``pip`` command line.
Warning: on modern Linux operating systems, you may have an externally-managed-environment
error message when you try to use ``pip``. In this case, go to the the PipX section below.
.. code-block:: console
pip install --user glances
*Note*: Python headers are required to install `psutil`_, a Glances
dependency. For example, on Debian/Ubuntu **the simplest** is
``apt install python3-psutil`` or alternatively need to install first
the *python-dev* package and gcc (*python-devel* on Fedora/CentOS/RHEL).
For Windows, just install psutil from the binary installation file.
By default, Glances is installed **without** the Web interface dependencies.
To install it, use the following command:
.. code-block:: console
pip install --user 'glances[web]'
For a full installation (with all features, see features list bellow):
.. code-block:: console
pip install --user 'glances[all]'
Features list:
- all: install dependencies for all features
- action: install dependencies for action feature
- browser: install dependencies for Glances centram browser
- cloud: install dependencies for cloud plugin
- containers: install dependencies for container plugin
- export: install dependencies for all exports modules
- gpu: install dependencies for GPU plugin
- graph: install dependencies for graph export
- ip: install dependencies for IP public option
- raid: install dependencies for RAID plugin
- sensors: install dependencies for sensors plugin
- smart: install dependencies for smart plugin
- snmp: install dependencies for SNMP
- sparklines: install dependencies for sparklines option
- web: install dependencies for Webserver (WebUI) and Web API
- wifi: install dependencies for Wifi plugin
To upgrade Glances to the latest version:
.. code-block:: console
pip install --user --upgrade glances
The current develop branch is published to the test.pypi.org package index.
If you want to test the develop version (could be instable), enter:
.. code-block:: console
pip install --user -i https://test.pypi.org/simple/ Glances
PyPI: PipX, the alternative way
-------------------------------
Install PipX on your system (apt install pipx on Ubuntu).
Install Glances (with all features):
.. code-block:: console
pipx install 'glances[all]'
The glances script will be installed in the ~/.local/bin folder.
Shell tab completion 🔍
=======================
Glances 4.3.2 and higher includes shell tab autocompletion thanks to the --print-completion option.
For example, on a Linux operating system with bash shell:
.. code-block:: console
$ mkdir -p ${XDG_DATA_HOME:="$HOME/.local/share"}/bash-completion
$ glances --print-completion bash > ${XDG_DATA_HOME:="$HOME/.local/share"}/bash-completion/glances
$ source ${XDG_DATA_HOME:="$HOME/.local/share"}/bash-completion/glances
Following shells are supported: bash, zsh and tcsh.
Requirements 🧩
===============
Glances is developed in Python. A minimal Python version 3.10 or higher
should be installed on your system.
*Note for Python 2 users*
Glances version 4 or higher do not support Python 2 (and Python 3 < 3.10).
Please uses Glances version 3.4.x if you need Python 2 support.
Dependencies:
- ``psutil`` (better with latest version)
- ``defusedxml`` (in order to monkey patch xmlrpc)
- ``packaging`` (for the version comparison)
- ``windows-curses`` (Windows Curses implementation) [Windows-only]
- ``shtab`` (Shell autocompletion) [All but Windows]
- ``jinja2`` (for fetch mode and templating)
Extra dependencies:
- ``batinfo`` (for battery monitoring)
- ``bernhard`` (for the Riemann export module)
- ``cassandra-driver`` (for the Cassandra export module)
- ``chevron`` (for the action script feature)
- ``docker`` (for the Containers Docker monitoring support)
- ``elasticsearch`` (for the Elastic Search export module)
- ``FastAPI`` and ``Uvicorn`` (for Web server mode)
- ``graphitesender`` (For the Graphite export module)
- ``hddtemp`` (for HDD temperature monitoring support) [Linux-only]
- ``influxdb`` (for the InfluxDB version 1 export module)
- ``influxdb-client`` (for the InfluxDB version 2 export module)
- ``kafka-python`` (for the Kafka export module)
- ``nvidia-ml-py`` (for the GPU plugin)
- ``pycouchdb`` (for the CouchDB export module)
- ``pika`` (for the RabbitMQ/ActiveMQ export module)
- ``podman`` (for the Containers Podman monitoring support)
- ``potsdb`` (for the OpenTSDB export module)
- ``prometheus_client`` (for the Prometheus export module)
- ``psycopg[binary]`` (for the PostgreSQL/TimeScale export module)
- ``pygal`` (for the graph export module)
- ``pymdstat`` (for RAID support) [Linux-only]
- ``pymongo`` (for the MongoDB export module)
- ``pysnmp-lextudio`` (for SNMP support)
- ``pySMART.smartx`` (for HDD Smart support) [Linux-only]
- ``pyzmq`` (for the ZeroMQ export module)
- ``requests`` (for the Ports, Cloud plugins and RESTful export module)
- ``sparklines`` (for the Quick Plugin sparklines option)
- ``statsd`` (for the StatsD export module)
- ``wifi`` (for the wifi plugin) [Linux-only]
- ``zeroconf`` (for the autodiscover mode)
Project sponsorship 🙌
======================
You can help me to achieve my goals of improving this open-source project
or just say "thank you" by:
- sponsor me using one-time or monthly tier Github sponsors_ page
- send me some pieces of bitcoin: 185KN9FCix3svJYp7JQM7hRMfSKyeaJR4X
- buy me a gift on my wishlist_ page
Any and all contributions are greatly appreciated.
Authors and Contributors 🔥
===========================
Nicolas Hennion (@nicolargo) <nicolas@nicolargo.com>
.. image:: https://img.shields.io/twitter/url/https/twitter.com/cloudposse.svg?style=social&label=Follow%20%40nicolargo
:target: https://twitter.com/nicolargo
License 📜
==========
Glances is distributed under the LGPL version 3 license. See ``COPYING`` for more details.
.. _psutil: https://github.com/giampaolo/psutil
.. _readthedocs: https://glances.readthedocs.io/
.. _forum: https://www.reddit.com/r/glances/
.. _sponsors: https://github.com/sponsors/nicolargo
.. _wishlist: https://www.amazon.fr/hz/wishlist/ls/BWAAQKWFR3FI?ref_=wl_share
.. _PythonApi: https://glances.readthedocs.io/en/develop/api/python.html
.. _RestfulApi: https://glances.readthedocs.io/en/develop/api/restful.html
.. _FAQ: https://github.com/nicolargo/glances/blob/develop/docs/faq.rst
.. _Discussions: https://github.com/nicolargo/glances/discussions

View File

@ -1,64 +1,44 @@
.. raw:: html
===============================
Glances - An eye on your system
===============================
<div align="center">
.. image:: ./docs/_static/glances-responsive-webdesign.png
.. raw:: html
<h1>Glances</h1>
An Eye on your System
| |pypi| |test| |contributors| |quality|
| |starts| |docker| |pypistat| |sponsors|
| |reddit|
.. |pypi| image:: https://img.shields.io/pypi/v/glances.svg
.. image:: https://img.shields.io/pypi/v/glances.svg
:target: https://pypi.python.org/pypi/Glances
.. |starts| image:: https://img.shields.io/github/stars/nicolargo/glances.svg
.. image:: https://img.shields.io/github/stars/nicolargo/glances.svg
:target: https://github.com/nicolargo/glances/
:alt: Github stars
.. |docker| image:: https://img.shields.io/docker/pulls/nicolargo/glances
.. image:: https://img.shields.io/docker/pulls/nicolargo/glances
:target: https://hub.docker.com/r/nicolargo/glances/
:alt: Docker pull
.. |pypistat| image:: https://pepy.tech/badge/glances/month
.. image:: https://pepy.tech/badge/glances/month
:target: https://pepy.tech/project/glances
:alt: Pypi downloads
.. |test| image:: https://github.com/nicolargo/glances/actions/workflows/ci.yml/badge.svg?branch=develop
.. image:: https://github.com/nicolargo/glances/actions/workflows/test.yml/badge.svg
:target: https://github.com/nicolargo/glances/actions
:alt: Linux tests (GitHub Actions)
.. |contributors| image:: https://img.shields.io/github/contributors/nicolargo/glances
.. image:: https://img.shields.io/github/contributors/nicolargo/glances
:target: https://github.com/nicolargo/glances/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+contributor%22
:alt: Contributors
:alt: Contibutors
.. |quality| image:: https://scrutinizer-ci.com/g/nicolargo/glances/badges/quality-score.png?b=develop
.. image:: https://scrutinizer-ci.com/g/nicolargo/glances/badges/quality-score.png?b=develop
:target: https://scrutinizer-ci.com/g/nicolargo/glances/?branch=develop
:alt: Code quality
.. |sponsors| image:: https://img.shields.io/github/sponsors/nicolargo
.. image:: https://img.shields.io/github/sponsors/nicolargo
:target: https://github.com/sponsors/nicolargo
:alt: Sponsors
.. |twitter| image:: https://img.shields.io/badge/X-000000?style=for-the-badge&logo=x&logoColor=white
.. image:: https://img.shields.io/twitter/url/https/twitter.com/cloudposse.svg?style=social&label=Follow%20%40nicolargo
:target: https://twitter.com/nicolargo
:alt: @nicolargo
.. |reddit| image:: https://img.shields.io/badge/Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white
:target: https://www.reddit.com/r/glances/
:alt: @reddit
.. raw:: html
</div>
Summary 🌟
==========
Summary
=======
**Glances** is an open-source system cross-platform monitoring tool.
It allows real-time monitoring of various aspects of your system such as
@ -70,17 +50,327 @@ and can also be used for remote monitoring of systems via a web interface or com
line interface. It is easy to install and use and can be customized to show only
the information that you are interested in.
.. image:: https://raw.githubusercontent.com/nicolargo/glances/develop/docs/_static/glances-summary.png
In client/server mode, remote monitoring could be done via terminal,
Web interface or API (XML-RPC and RESTful).
Stats can also be exported to files or external time/value databases, CSV or direct
output to STDOUT.
.. image:: https://raw.githubusercontent.com/nicolargo/glances/develop/docs/_static/glances-responsive-webdesign.png
Glances is written in Python and uses libraries to grab information from
your system. It is based on an open architecture where developers can
add new plugins or exports modules.
Usage 👋
========
Project sponsorship
===================
You can help me to achieve my goals of improving this open-source project
or just say "thank you" by:
- sponsor me using one-time or monthly tier Github sponsors_ page
- send me some pieces of bitcoin: 185KN9FCix3svJYp7JQM7hRMfSKyeaJR4X
- buy me a gift on my wishlist_ page
Any and all contributions are greatly appreciated.
Requirements
============
- ``python>=2.7`` or ``python>=3.4``
- ``psutil>=5.3.0`` (better with latest version)
- ``defusedxml`` (in order to monkey patch xmlrpc)
- ``ujson`` (an optimized alternative to the standard json module)
- ``future`` (for Python 2 support)
*Note for Python 2.6 users*
Glances no longer supports Python 2.6. Please upgrade
to a minimum Python version of 2.7/3.4+ or downgrade to Glances 2.6.2 (last version
with Python 2.6 support).
*Deprecation warning note for Python 2.x users*
Glances version 4.0 will no longer supports Python 2.x.
Optional dependencies:
- ``batinfo`` (for battery monitoring)
- ``bernhard`` (for the Riemann export module)
- ``bottle`` (for Web server mode)
- ``cassandra-driver`` (for the Cassandra export module)
- ``chevron`` (for the action script feature)
- ``couchdb`` (for the CouchDB export module)
- ``docker`` (for the Containers Docker monitoring support) [Linux/macOS-only / Python >= 3.6]
- ``elasticsearch`` (for the Elastic Search export module)
- ``graphitesender`` (For the Graphite export module)
- ``hddtemp`` (for HDD temperature monitoring support) [Linux-only]
- ``influxdb`` (for the InfluxDB version 1 export module)
- ``influxdb-client`` (for the InfluxDB version 2 export module) [Only for Python >= 3.6]
- ``kafka-python`` (for the Kafka export module)
- ``netifaces`` (for the IP plugin)
- ``py3nvml`` (for the GPU plugin) [Only for Python 3]
- ``pika`` (for the RabbitMQ/ActiveMQ export module)
- ``podman`` (for the Containers Podman monitoring support) [Linux/macOS-only / Python >= 3.6]
- ``potsdb`` (for the OpenTSDB export module)
- ``prometheus_client`` (for the Prometheus export module)
- ``py-cpuinfo`` (for the Quicklook CPU info module)
- ``pygal`` (for the graph export module)
- ``pymdstat`` (for RAID support) [Linux-only]
- ``pymongo`` (for the MongoDB export module) [Only for Python >= 3.7]
- ``pysnmp`` (for SNMP support)
- ``pySMART.smartx`` (for HDD Smart support) [Linux-only]
- ``pyzmq`` (for the ZeroMQ export module)
- ``requests`` (for the Ports, Cloud plugins and RESTful export module)
- ``scandir`` (for the Folders plugin) [Only for Python < 3.5]
- ``sparklines`` (for the Quick Plugin sparklines option)
- ``statsd`` (for the StatsD export module)
- ``wifi`` (for the wifi plugin) [Linux-only]
- ``zeroconf`` (for the autodiscover mode)
Installation
============
There are several methods to test/install Glances on your system. Choose your weapon!
PyPI: The standard way
----------------------
Glances is on ``PyPI``. By using PyPI, you will be using the latest
stable version.
To install Glances, simply use ``pip``:
.. code-block:: console
pip install --user glances
*Note*: Python headers are required to install `psutil`_, a Glances
dependency. For example, on Debian/Ubuntu you need to install first
the *python-dev* package (*python-devel* on Fedora/CentOS/RHEL).
For Windows, just install psutil from the binary installation file.
*Note 2 (for the Wifi plugin)*: If you want to use the Wifi plugin, you need
to install the *wireless-tools* package on your system.
By default, Glances is installed without the Web interface dependencies.
To install it, use the following command:
.. code-block:: console
pip install --user 'glances[web]'
For a full installation (with all features):
.. code-block:: console
pip install --user 'glances[all]'
To upgrade Glances to the latest version:
.. code-block:: console
pip install --user --upgrade glances
The current develop branch is published to the test.pypi.org package index.
If you want to test the develop version (could be instable), enter:
.. code-block:: console
pip install --user -i https://test.pypi.org/simple/ Glances
Glances Auto Install script: the easy way
-----------------------------------------
To install both dependencies and the latest Glances production ready version
(aka *master* branch), just enter the following command line:
.. code-block:: console
curl -L https://bit.ly/glances | /bin/bash
or
.. code-block:: console
wget -O- https://bit.ly/glances | /bin/bash
*Note*: This is only supported on some GNU/Linux distributions and Mac OS X.
If you want to support other distributions, please contribute to `glancesautoinstall`_.
Docker: the fun way
-------------------
Glances Docker images are availables. You can use it to monitor your
server and all your containers !
Get the Glances container:
.. code-block:: console
docker pull nicolargo/glances:latest-full
The following tags are availables:
- *latest-full* for a full Alpine Glances image (latest release) with all dependencies
- *latest* for a basic Alpine Glances (latest release) version with minimal dependencies (Bottle and Docker)
- *dev* for a basic Alpine Glances image (based on development branch) with all dependencies (Warning: may be instable)
- *ubuntu-latest-full* for a full Ubuntu Glances image (latest release) with all dependencies
- *ubuntu-latest* for a basic Ubuntu Glances (latest release) version with minimal dependencies (Bottle and Docker)
- *ubuntu-dev* for a basic Ubuntu Glances image (based on development branch) with all dependencies (Warning: may be instable)
Run last version of Glances container in *console mode*:
.. code-block:: console
docker run --rm -e TZ="${TZ}" -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it nicolargo/glances:latest-full
By default, the /etc/glances/glances.conf file is used (based on docker-compose/glances.conf).
Additionally, if you want to use your own glances.conf file, you can
create your own Dockerfile:
.. code-block:: console
FROM nicolargo/glances:latest
COPY glances.conf /root/.config/glances/glances.conf
CMD python -m glances -C /root/.config/glances/glances.conf $GLANCES_OPT
Alternatively, you can specify something along the same lines with
docker run options (notice the `GLANCES_OPT` environment
variable setting parameters for the glances startup command):
.. code-block:: console
docker run -e TZ="${TZ}" -v `pwd`/glances.conf:/root/.config/glances/glances.conf -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host -e GLANCES_OPT="-C /root/.config/glances/glances.conf" -it nicolargo/glances:latest-full
Where \`pwd\`/glances.conf is a local directory containing your glances.conf file.
Run the container in *Web server mode*:
.. code-block:: console
docker run -d --restart="always" -p 61208-61209:61208-61209 -e TZ="${TZ}" -e GLANCES_OPT="-w" -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host nicolargo/glances:latest-full
For a full list of options, see the Glances `Docker`_ documentation page.
GNU/Linux
---------
`Glances` is available on many Linux distributions, so you should be
able to install it using your favorite package manager. Be aware that
when you use this method the operating system `package`_ for `Glances`
may not be the latest version.
Note: The Debian package (and all other Debian-based distributions) do
not include anymore the JS statics files used by the Web interface
(see ``issue2021``). If you want to add it to your Glances installation,
follow the instructions: ``issue2021comment``.
FreeBSD
-------
To install the binary package:
.. code-block:: console
# pkg install py38-glances
To install Glances from ports:
.. code-block:: console
# cd /usr/ports/sysutils/py-glances/
# make install clean
macOS
-----
If you do not want to use the glancesautoinstall script, follow this procedure.
macOS users can install Glances using ``Homebrew`` or ``MacPorts``.
Homebrew
````````
.. code-block:: console
$ brew install glances
MacPorts
````````
.. code-block:: console
$ sudo port install glances
Windows
-------
Install `Python`_ for Windows (Python 2.7.9+ and 3.4+ ship with pip) and
then run the following command:
.. code-block:: console
$ pip install glances
Android
-------
You need a rooted device and the `Termux`_ application (available on the
Google Play Store).
Start Termux on your device and enter:
.. code-block:: console
$ apt update
$ apt upgrade
$ apt install clang python
$ pip install bottle
$ pip install glances
And start Glances:
.. code-block:: console
$ glances
You can also run Glances in server mode (-s or -w) in order to remotely
monitor your Android device.
Source
------
To install Glances from source:
.. code-block:: console
$ wget https://github.com/nicolargo/glances/archive/vX.Y.tar.gz -O - | tar xz
$ cd glances-*
# python setup.py install
*Note*: Python headers are required to install psutil.
Chef
----
An awesome ``Chef`` cookbook is available to monitor your infrastructure:
https://supermarket.chef.io/cookbooks/glances (thanks to Antoine Rouyer)
Puppet
------
You can install Glances using ``Puppet``: https://github.com/rverchere/puppet-glances
Ansible
-------
A Glances ``Ansible`` role is available: https://galaxy.ansible.com/zaxos/glances-ansible-role/
Usage
=====
For the standalone mode, just run:
@ -88,8 +378,6 @@ For the standalone mode, just run:
$ glances
.. image:: ./docs/_static/glances-summary.png
For the Web server mode, run:
.. code-block:: console
@ -98,36 +386,28 @@ For the Web server mode, run:
and enter the URL ``http://<ip>:61208`` in your favorite web browser.
In this mode, a HTTP/Restful API is exposed, see document `RestfulApi`_ for more details.
.. image:: ./docs/_static/screenshot-web.png
For the client/server mode (remote monitoring through XML-RPC), run the following command on the server:
For the client/server mode, run:
.. code-block:: console
$ glances -s
and this one on the client:
on the server side and run:
.. code-block:: console
$ glances -c <ip>
on the client one.
You can also detect and display all Glances servers available on your
network (or defined in the configuration file) in TUI:
network or defined in the configuration file:
.. code-block:: console
$ glances --browser
or WebUI:
.. code-block:: console
$ glances -w --browser
It possible to display raw stats on stdout:
You can also display raw stats on stdout:
.. code-block:: console
@ -159,443 +439,24 @@ or in a JSON format thanks to the stdout-json option (attribute not supported in
mem: {"total": 7837949952, "available": 2919079936, "percent": 62.8, "used": 4918870016, "free": 2919079936, "active": 2841214976, "inactive": 3340550144, "buffers": 546799616, "cached": 3068141568, "shared": 788156416}
...
Last but not least, you can use the fetch mode to get a quick look of a machine:
and RTFM, always.
.. code-block:: console
$ glances --fetch
Results look like this:
.. image:: ./docs/_static/screenshot-fetch.png
Use Glances as a Python library 📚
==================================
You can access the Glances API by importing the `glances.api` module and creating an
instance of the `GlancesAPI` class. This instance provides access to all Glances plugins
and their fields. For example, to access the CPU plugin and its total field, you can
use the following code:
.. code-block:: python
>>> from glances import api
>>> gl = api.GlancesAPI()
>>> gl.cpu
{'cpucore': 16,
'ctx_switches': 1214157811,
'guest': 0.0,
'idle': 91.4,
'interrupts': 991768733,
'iowait': 0.3,
'irq': 0.0,
'nice': 0.0,
'soft_interrupts': 423297898,
'steal': 0.0,
'syscalls': 0,
'system': 5.4,
'total': 7.3,
'user': 3.0}
>>> gl.cpu.get("total")
7.3
>>> gl.mem.get("used")
12498582144
>>> gl.auto_unit(gl.mem.get("used"))
11.6G
If the stats return a list of items (like network interfaces or processes), you can
access them by their name:
.. code-block:: python
>>> gl.network.keys()
['wlp0s20f3', 'veth33b370c', 'veth19c7711']
>>> gl.network.get("wlp0s20f3")
{'alias': None,
'bytes_all': 362,
'bytes_all_gauge': 9242285709,
'bytes_all_rate_per_sec': 1032.0,
'bytes_recv': 210,
'bytes_recv_gauge': 7420522678,
'bytes_recv_rate_per_sec': 599.0,
'bytes_sent': 152,
'bytes_sent_gauge': 1821763031,
'bytes_sent_rate_per_sec': 433.0,
'interface_name': 'wlp0s20f3',
'key': 'interface_name',
'speed': 0,
'time_since_update': 0.3504955768585205}
For a complete example of how to use Glances as a library, have a look to the `PythonApi`_.
Documentation 📜
================
Documentation
=============
For complete documentation have a look at the readthedocs_ website.
If you have any question (after RTFM! and the `FAQ`_), please post it on the official Reddit `forum`_ or in GitHub `Discussions`_.
If you have any question (after RTFM!), please post it on the official Q&A `forum`_.
Gateway to other services 🌐
============================
Gateway to other services
=========================
Glances can export stats to:
Glances can export stats to: ``CSV`` file, ``JSON`` file, ``InfluxDB``, ``Cassandra``, ``CouchDB``,
``OpenTSDB``, ``Prometheus``, ``StatsD``, ``ElasticSearch``, ``RabbitMQ/ActiveMQ``,
``ZeroMQ``, ``Kafka``, ``Riemann``, ``Graphite`` and ``RESTful`` server.
- files: ``CSV`` and ``JSON``
- databases: ``InfluxDB``, ``ElasticSearch``, ``PostgreSQL/TimeScale``, ``Cassandra``, ``CouchDB``, ``OpenTSDB``, ``Prometheus``, ``StatsD``, ``Riemann`` and ``Graphite``
- brokers: ``RabbitMQ/ActiveMQ``, ``NATS``, ``ZeroMQ`` and ``Kafka``
- others: ``RESTful`` endpoint
Installation 🚀
===============
There are several methods to test/install Glances on your system. Choose your weapon!
PyPI: Pip, the standard way
---------------------------
Glances is on ``PyPI``. By using PyPI, you will be using the latest stable version.
To install Glances, simply use the ``pip`` command line in an virtual environment.
.. code-block:: console
cd ~
python3 -m venv ~/.venv
source ~/.venv/bin/activate
pip install glances
*Note*: Python headers are required to install `psutil`_, a Glances
dependency. For example, on Debian/Ubuntu **the simplest** is
``apt install python3-psutil`` or alternatively need to install first
the *python-dev* package and gcc (*python-devel* on Fedora/CentOS/RHEL).
For Windows, just install psutil from the binary installation file.
By default, Glances is installed **without** the Web interface dependencies.
To install it, use the following command:
.. code-block:: console
pip install 'glances[web]'
For a full installation (with all features, see features list bellow):
.. code-block:: console
pip install 'glances[all]'
Features list:
- all: install dependencies for all features
- action: install dependencies for action feature
- browser: install dependencies for Glances centram browser
- cloud: install dependencies for cloud plugin
- containers: install dependencies for container plugin
- export: install dependencies for all exports modules
- gpu: install dependencies for GPU plugin
- graph: install dependencies for graph export
- ip: install dependencies for IP public option
- raid: install dependencies for RAID plugin
- sensors: install dependencies for sensors plugin
- smart: install dependencies for smart plugin
- snmp: install dependencies for SNMP
- sparklines: install dependencies for sparklines option
- web: install dependencies for Webserver (WebUI) and Web API
- wifi: install dependencies for Wifi plugin
To upgrade Glances to the latest version:
.. code-block:: console
pip install --upgrade glances
PyPI: PipX, the alternative way
-------------------------------
Install PipX on your system. For example on Ubuntu/Debian:
.. code-block:: console
sudo apt install pipx
Then install Glances (with all features):
.. code-block:: console
pipx install 'glances[all]'
The glances script will be installed in the ~/.local/bin folder.
To upgrade Glances to the latest version:
.. code-block:: console
pipx upgrade glances
Docker: the cloudy way
----------------------
Glances Docker images are available. You can use it to monitor your
server and all your containers !
The following tags are available:
- *latest-full* for a full Alpine Glances image (latest release) with all dependencies
- *latest* for a basic Alpine Glances (latest release) version with minimal dependencies (FastAPI and Docker)
- *dev* for a basic Alpine Glances image (based on development branch) with all dependencies (Warning: may be instable)
- *ubuntu-latest-full* for a full Ubuntu Glances image (latest release) with all dependencies
- *ubuntu-latest* for a basic Ubuntu Glances (latest release) version with minimal dependencies (FastAPI and Docker)
- *ubuntu-dev* for a basic Ubuntu Glances image (based on development branch) with all dependencies (Warning: may be instable)
Run last version of Glances container in *console mode*:
.. code-block:: console
docker run --rm -e TZ="${TZ}" -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host --network host -it nicolargo/glances:latest-full
By default, the /etc/glances/glances.conf file is used (based on docker-compose/glances.conf).
Additionally, if you want to use your own glances.conf file, you can
create your own Dockerfile:
.. code-block:: console
FROM nicolargo/glances:latest
COPY glances.conf /root/.config/glances/glances.conf
CMD python -m glances -C /root/.config/glances/glances.conf $GLANCES_OPT
Alternatively, you can specify something along the same lines with
docker run options (notice the `GLANCES_OPT` environment
variable setting parameters for the glances startup command):
.. code-block:: console
docker run -e TZ="${TZ}" -v $HOME/.config/glances/glances.conf:/glances.conf:ro -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host -e GLANCES_OPT="-C /glances.conf" -it nicolargo/glances:latest-full
Where $HOME/.config/glances/glances.conf is a local directory containing your glances.conf file.
Run the container in *Web server mode*:
.. code-block:: console
docker run -d --restart="always" -p 61208-61209:61208-61209 -e TZ="${TZ}" -e GLANCES_OPT="-w" -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host nicolargo/glances:latest-full
For a full list of options, see the Glances `Docker`_ documentation page.
It is also possible to use a simple Docker compose file (see in ./docker-compose/docker-compose.yml):
.. code-block:: console
cd ./docker-compose
docker-compose up
It will start a Glances server with WebUI.
Brew: The missing package manager
---------------------------------
For Linux and Mac OS, it is also possible to install Glances with `Brew`_:
.. code-block:: console
brew install glances
GNU/Linux package
-----------------
`Glances` is available on many Linux distributions, so you should be
able to install it using your favorite package manager. Nevetheless,
i do not recommend it. Be aware that when you use this method the operating
system `package`_ for `Glances`may not be the latest version and only basics
plugins are enabled.
Note: The Debian package (and all other Debian-based distributions) do
not include anymore the JS statics files used by the Web interface
(see ``issue2021``). If you want to add it to your Glances installation,
follow the instructions: ``issue2021comment``. In Glances version 4 and
higher, the path to the statics file is configurable (see ``issue2612``).
FreeBSD
-------
On FreeBSD, package name depends on the Python version.
Check for Python version:
.. code-block:: console
# python --version
Install the Glances package:
.. code-block:: console
# pkg install pyXY-glances
Where X and Y are the Major and Minor Values of your Python System.
.. code-block:: console
# Example for Python 3.11.3: pkg install py311-glances
**NOTE:** Check Glances Binary Package Version for your System Architecture.
You must have the Correct Python Version Installed which corresponds to the Glances Binary Package.
To install Glances from Ports:
.. code-block:: console
# cd /usr/ports/sysutils/py-glances/
# make install clean
macOS
-----
MacOS users can install Glances using ``Homebrew`` or ``MacPorts``.
Homebrew
````````
.. code-block:: console
$ brew install glances
MacPorts
````````
.. code-block:: console
$ sudo port install glances
Windows
-------
Install `Python`_ for Windows (Python 3.4+ ship with pip) and
follow the Glances Pip install procedure.
Android
-------
You need a rooted device and the `Termux`_ application (available on the
Google Play Store).
Start Termux on your device and enter:
.. code-block:: console
$ apt update
$ apt upgrade
$ apt install clang python
$ pip install fastapi uvicorn jinja2
$ pip install glances
And start Glances:
.. code-block:: console
$ glances
You can also run Glances in server mode (-s or -w) in order to remotely
monitor your Android device.
Source
------
To install Glances from source:
.. code-block:: console
$ pip install https://github.com/nicolargo/glances/archive/vX.Y.tar.gz
*Note*: Python headers are required to install psutil.
Chef
----
An awesome ``Chef`` cookbook is available to monitor your infrastructure:
https://supermarket.chef.io/cookbooks/glances (thanks to Antoine Rouyer)
Puppet
------
You can install Glances using ``Puppet``: https://github.com/rverchere/puppet-glances
Ansible
-------
A Glances ``Ansible`` role is available: https://galaxy.ansible.com/zaxos/glances-ansible-role/
Shell tab completion 🔍
=======================
Glances 4.3.2 and higher includes shell tab autocompletion thanks to the --print-completion option.
For example, on a Linux operating system with bash shell:
.. code-block:: console
$ mkdir -p ${XDG_DATA_HOME:="$HOME/.local/share"}/bash-completion
$ glances --print-completion bash > ${XDG_DATA_HOME:="$HOME/.local/share"}/bash-completion/glances
$ source ${XDG_DATA_HOME:="$HOME/.local/share"}/bash-completion/glances
Following shells are supported: bash, zsh and tcsh.
Requirements 🧩
===============
Glances is developed in Python. A minimal Python version 3.10 or higher
should be installed on your system.
*Note for Python 2 users*
Glances version 4 or higher do not support Python 2 (and Python 3 < 3.10).
Please uses Glances version 3.4.x if you need Python 2 support.
Dependencies:
- ``psutil`` (better with latest version)
- ``defusedxml`` (in order to monkey patch xmlrpc)
- ``packaging`` (for the version comparison)
- ``windows-curses`` (Windows Curses implementation) [Windows-only]
- ``shtab`` (Shell autocompletion) [All but Windows]
- ``jinja2`` (for fetch mode and templating)
Extra dependencies:
- ``batinfo`` (for battery monitoring)
- ``bernhard`` (for the Riemann export module)
- ``cassandra-driver`` (for the Cassandra export module)
- ``chevron`` (for the action script feature)
- ``docker`` (for the Containers Docker monitoring support)
- ``elasticsearch`` (for the Elastic Search export module)
- ``FastAPI`` and ``Uvicorn`` (for Web server mode)
- ``graphitesender`` (For the Graphite export module)
- ``hddtemp`` (for HDD temperature monitoring support) [Linux-only]
- ``influxdb`` (for the InfluxDB version 1 export module)
- ``influxdb-client`` (for the InfluxDB version 2 export module)
- ``kafka-python`` (for the Kafka export module)
- ``nats-py`` (for the NATS export module)
- ``nvidia-ml-py`` (for the GPU plugin)
- ``pycouchdb`` (for the CouchDB export module)
- ``pika`` (for the RabbitMQ/ActiveMQ export module)
- ``podman`` (for the Containers Podman monitoring support)
- ``potsdb`` (for the OpenTSDB export module)
- ``prometheus_client`` (for the Prometheus export module)
- ``psycopg[binary]`` (for the PostgreSQL/TimeScale export module)
- ``pygal`` (for the graph export module)
- ``pymdstat`` (for RAID support) [Linux-only]
- ``pymongo`` (for the MongoDB export module)
- ``pysnmp-lextudio`` (for SNMP support)
- ``pySMART.smartx`` (for HDD Smart support) [Linux-only]
- ``pyzmq`` (for the ZeroMQ export module)
- ``requests`` (for the Ports, Cloud plugins and RESTful export module)
- ``sparklines`` (for the Quick Plugin sparklines option)
- ``statsd`` (for the StatsD export module)
- ``wifi`` (for the wifi plugin) [Linux-only]
- ``zeroconf`` (for the autodiscover mode)
How to contribute ? 🤝
======================
How to contribute ?
===================
If you want to contribute to the Glances project, read this `wiki`_ page.
@ -604,53 +465,29 @@ There is also a chat dedicated to the Glances developers:
.. image:: https://badges.gitter.im/Join%20Chat.svg
:target: https://gitter.im/nicolargo/glances?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
Project sponsorship 🙌
======================
You can help me to achieve my goals of improving this open-source project
or just say "thank you" by:
- sponsor me using one-time or monthly tier Github sponsors_ page
- send me some pieces of bitcoin: 185KN9FCix3svJYp7JQM7hRMfSKyeaJR4X
- buy me a gift on my wishlist_ page
Any and all contributions are greatly appreciated.
Authors and Contributors 🔥
===========================
Author
======
Nicolas Hennion (@nicolargo) <nicolas@nicolargo.com>
.. image:: https://img.shields.io/twitter/url/https/twitter.com/cloudposse.svg?style=social&label=Follow%20%40nicolargo
:target: https://twitter.com/nicolargo
License 📜
==========
License
=======
Glances is distributed under the LGPL version 3 license. See ``COPYING`` for more details.
More stars ! 🌟
===============
Please give us a star on `GitHub`_ if you like this project.
.. image:: https://api.star-history.com/svg?repos=nicolargo/glances&type=Date
:target: https://www.star-history.com/#nicolargo/glances&Date
:alt: Star history
.. _psutil: https://github.com/giampaolo/psutil
.. _Brew: https://formulae.brew.sh/formula/glances
.. _glancesautoinstall: https://github.com/nicolargo/glancesautoinstall
.. _Python: https://www.python.org/getit/
.. _Termux: https://play.google.com/store/apps/details?id=com.termux
.. _readthedocs: https://glances.readthedocs.io/
.. _forum: https://www.reddit.com/r/glances/
.. _forum: https://groups.google.com/forum/?hl=en#!forum/glances-users
.. _wiki: https://github.com/nicolargo/glances/wiki/How-to-contribute-to-Glances-%3F
.. _package: https://repology.org/project/glances/versions
.. _sponsors: https://github.com/sponsors/nicolargo
.. _wishlist: https://www.amazon.fr/hz/wishlist/ls/BWAAQKWFR3FI?ref_=wl_share
.. _Docker: https://github.com/nicolargo/glances/blob/master/docs/docker.rst
.. _GitHub: https://github.com/nicolargo/glances
.. _PythonApi: https://glances.readthedocs.io/en/develop/api/python.html
.. _RestfulApi: https://glances.readthedocs.io/en/develop/api/restful.html
.. _FAQ: https://github.com/nicolargo/glances/blob/develop/docs/faq.rst
.. _Discussions: https://github.com/nicolargo/glances/discussions
.. _issue2021: https://github.com/nicolargo/glances/issues/2021#issuecomment-1197831157
.. _issue2021comment: https://github.com/nicolargo/glances/issues/2021#issuecomment-1197831157
.. _Docker: https://github.com/nicolargo/glances/blob/develop/docs/docker.rst

View File

@ -2,10 +2,13 @@
## Supported Versions
Use this section to tell people about which versions of your project are
currently being supported with security updates.
| Version | Support security updates |
| ------- | ------------------------ |
| 4.x | :white_check_mark: |
| < 4.0 | :x: |
| 3.x | :white_check_mark: |
| < 3.0 | :x: |
## Reporting a Vulnerability
@ -28,3 +31,4 @@ If there are any vulnerabilities in {{cookiecutter.project_name}}, don't hesitat
4. Please do not disclose the vulnerability publicly until a fix is released!
Once we have either a) published a fix, or b) declined to address the vulnerability for whatever reason, you are free to publicly disclose it.

View File

@ -1,237 +0,0 @@
# This file was autogenerated by uv via the following command:
# uv export --no-emit-workspace --no-hashes --all-extras --no-group dev --output-file all-requirements.txt
annotated-doc==0.0.4
# via fastapi
annotated-types==0.7.0
# via pydantic
anyio==4.12.0
# via
# elasticsearch
# starlette
batinfo==0.4.2 ; sys_platform == 'linux'
# via glances
bernhard==0.2.6
# via glances
cassandra-driver==3.29.3
# via glances
certifi==2025.11.12
# via
# elastic-transport
# influxdb-client
# influxdb3-python
# requests
cffi==2.0.0 ; implementation_name == 'pypy' or platform_python_implementation != 'PyPy'
# via
# cryptography
# pyzmq
chardet==5.2.0
# via pysmart
charset-normalizer==3.4.4
# via requests
chevron==0.14.0
# via glances
click==8.1.8
# via
# geomet
# uvicorn
colorama==0.4.6 ; sys_platform == 'win32'
# via click
cryptography==46.0.3
# via pysnmpcrypto
defusedxml==0.7.1
# via glances
dnspython==2.8.0
# via pymongo
docker==7.1.0
# via glances
elastic-transport==9.2.1
# via elasticsearch
elasticsearch==9.2.1
# via glances
exceptiongroup==1.2.2 ; python_full_version < '3.11'
# via anyio
fastapi==0.128.0
# via glances
geomet==1.1.0
# via cassandra-driver
graphitesender==0.11.2
# via glances
h11==0.16.0
# via uvicorn
humanfriendly==10.0
# via pysmart
ibm-cloud-sdk-core==3.24.2
# via ibmcloudant
ibmcloudant==0.11.2
# via glances
idna==3.11
# via
# anyio
# requests
ifaddr==0.2.0
# via zeroconf
importlib-metadata==8.7.1
# via pygal
influxdb==5.3.2
# via glances
influxdb-client==1.49.0
# via glances
influxdb3-python==0.16.0
# via glances
jinja2==3.1.6
# via
# glances
# pysmi-lextudio
kafka-python==2.3.0
# via glances
markupsafe==3.0.3
# via jinja2
msgpack==1.1.2
# via influxdb
nats-py==2.12.0
# via glances
nvidia-ml-py==13.590.44
# via glances
packaging==25.0
# via glances
paho-mqtt==2.1.0
# via glances
pbkdf2==1.3
# via wifi
pika==1.3.2
# via glances
ply==3.11
# via pysmi-lextudio
podman==5.6.0
# via glances
potsdb==1.0.3
# via glances
prometheus-client==0.23.1
# via glances
protobuf==6.33.2
# via bernhard
psutil==7.2.1
# via glances
psycopg==3.3.2
# via glances
psycopg-binary==3.3.2 ; implementation_name != 'pypy'
# via psycopg
pyarrow==22.0.0
# via influxdb3-python
pyasn1==0.6.1
# via pysnmp-lextudio
pycparser==2.23 ; (implementation_name != 'PyPy' and platform_python_implementation != 'PyPy') or (implementation_name == 'pypy' and platform_python_implementation == 'PyPy')
# via cffi
pydantic==2.12.5
# via fastapi
pydantic-core==2.41.5
# via pydantic
pygal==3.1.0
# via glances
pyjwt==2.10.1
# via
# ibm-cloud-sdk-core
# ibmcloudant
pymdstat==0.4.3
# via glances
pymongo==4.15.5
# via glances
pyreadline3==3.5.4 ; sys_platform == 'win32'
# via humanfriendly
pysmart==1.4.2
# via glances
pysmi-lextudio==1.4.3
# via pysnmp-lextudio
pysnmp-lextudio==6.1.2
# via glances
pysnmpcrypto==0.0.4
# via pysnmp-lextudio
python-dateutil==2.9.0.post0
# via
# elasticsearch
# glances
# ibm-cloud-sdk-core
# ibmcloudant
# influxdb
# influxdb-client
# influxdb3-python
pytz==2025.2
# via influxdb
pywin32==311 ; sys_platform == 'win32'
# via docker
pyzmq==27.1.0
# via glances
reactivex==4.1.0
# via
# influxdb-client
# influxdb3-python
requests==2.32.5
# via
# docker
# glances
# ibm-cloud-sdk-core
# ibmcloudant
# influxdb
# podman
# pysmi-lextudio
setuptools==80.9.0
# via
# influxdb-client
# wifi
shtab==1.8.0 ; sys_platform != 'win32'
# via glances
six==1.17.0
# via
# glances
# influxdb
# python-dateutil
sniffio==1.3.1
# via
# elastic-transport
# elasticsearch
sparklines==0.7.0
# via glances
starlette==0.50.0
# via fastapi
statsd==4.0.1
# via glances
termcolor==3.3.0
# via sparklines
tomli==2.0.2 ; python_full_version < '3.11'
# via podman
typing-extensions==4.15.0
# via
# anyio
# cryptography
# elasticsearch
# fastapi
# psycopg
# pydantic
# pydantic-core
# reactivex
# starlette
# typing-inspection
# uvicorn
typing-inspection==0.4.2
# via pydantic
tzdata==2025.3 ; sys_platform == 'win32'
# via psycopg
urllib3==2.6.2
# via
# docker
# elastic-transport
# ibm-cloud-sdk-core
# influxdb-client
# influxdb3-python
# podman
# requests
uvicorn==0.40.0
# via glances
wifi==0.3.8
# via glances
windows-curses==2.4.1 ; sys_platform == 'win32'
# via glances
zeroconf==0.148.0
# via glances
zipp==3.23.0
# via importlib-metadata

View File

@ -1,9 +0,0 @@
✨ {{ gl.system['hostname'] }}{{ ' - ' + gl.ip['address'] if gl.ip['address'] else '' }}
⚙️ {{ gl.system['hr_name'] }} | Uptime: {{ gl.uptime }}
💡 LOAD {{ '%0.2f'| format(gl.load['min1']) }} {{ '%0.2f'| format(gl.load['min5']) }} {{ '%0.2f'| format(gl.load['min15']) }}
⚡ CPU {{ gl.bar(gl.cpu['total']) }} {{ gl.cpu['total'] }}% of {{ gl.core['log'] }} cores
🧠 MEM {{ gl.bar(gl.mem['percent']) }} {{ gl.mem['percent'] }}% ({{ gl.auto_unit(gl.mem['used']) }} {{ gl.auto_unit(gl.mem['total']) }})
{% for fs in gl.fs.keys() %}💾 {% if loop.index == 1 %}DISK{% else %} {% endif %} {{ gl.bar(gl.fs[fs]['percent']) }} {{ gl.fs[fs]['percent'] }}% ({{ gl.auto_unit(gl.fs[fs]['used']) }} {{ gl.auto_unit(gl.fs[fs]['size']) }}) for {{ fs }}
{% endfor %}{% for net in gl.network.keys() %}📡 {% if loop.index == 1 %}NET{% else %} {% endif %} ↓ {{ gl.auto_unit(gl.network[net]['bytes_recv_rate_per_sec']) }}b/s ↑ {{ gl.auto_unit(gl.network[net]['bytes_sent_rate_per_sec']) }}b/s for {{ net }}
{% endfor %}

View File

@ -1,23 +0,0 @@
_____ _
/ ____| |
| | __| | __ _ _ __ ___ ___ ___
| | |_ | |/ _` | '_ \ / __/ _ \/ __|
| |__| | | (_| | | | | (_| __/\__
\_____|_|\__,_|_| |_|\___\___||___/
✨ {{ gl.system['hostname'] }}{{ ' - ' + gl.ip['address'] if gl.ip['address'] else '' }}
⚙️ {{ gl.system['hr_name'] }} | Uptime: {{ gl.uptime }}
💡 LOAD {{ '%0.2f'| format(gl.load['min1']) }} {{ '%0.2f'| format(gl.load['min5']) }} {{ '%0.2f'| format(gl.load['min15']) }}
⚡ CPU {{ gl.bar(gl.cpu['total']) }} {{ gl.cpu['total'] }}% of {{ gl.core['log'] }} cores
🧠 MEM {{ gl.bar(gl.mem['percent']) }} {{ gl.mem['percent'] }}% ({{ gl.auto_unit(gl.mem['used']) }} {{ gl.auto_unit(gl.mem['total']) }})
{% for fs in gl.fs.keys() %}💾 {% if loop.index == 1 %}DISK{% else %} {% endif %} {{ gl.bar(gl.fs[fs]['percent']) }} {{ gl.fs[fs]['percent'] }}% ({{ gl.auto_unit(gl.fs[fs]['used']) }} {{ gl.auto_unit(gl.fs[fs]['size']) }}) for {{ fs }}
{% endfor %}{% for net in gl.network.keys() %}📡 {% if loop.index == 1 %}NET{% else %} {% endif %} ↓ {{ gl.auto_unit(gl.network[net]['bytes_recv_rate_per_sec']) }}b/s ↑ {{ gl.auto_unit(gl.network[net]['bytes_sent_rate_per_sec']) }}b/s for {{ net }}
{% endfor %}
🔥 TOP PROCESS by CPU
{% for process in gl.top_process() %}{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }} ⚡ {{ process['cpu_percent'] }}% CPU{{ ' ' * (8 - (gl.auto_unit(process['cpu_percent']) | length)) }} 🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM
{% endfor %}
🔥 TOP PROCESS by MEM
{% for process in gl.top_process(sorted_by='memory_percent', sorted_by_secondary='cpu_percent') %}{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }} 🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM{{ ' ' * (7 - (gl.auto_unit(process['memory_info']['rss']) | length)) }} ⚡ {{ process['cpu_percent'] }}% CPU
{% endfor %}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -13,75 +13,28 @@ check_update=true
# Default is 1200 values (~1h with the default refresh rate)
history_size=1200
# Set the way Glances should display the date (default is %Y-%m-%d %H:%M:%S %Z)
#strftime_format=%Y-%m-%d %H:%M:%S %Z
# Define external directory for loading additional plugins
# The layout follows the glances standard for plugin definitions
#plugin_dir=/home/user/dev/plugins
#strftime_format="%Y-%m-%d %H:%M:%S %Z"
##############################################################################
# User interface
##############################################################################
[outputs]
# Options for all UIs
#--------------------
# Separator in the Curses and WebUI interface (between top and others plugins)
#separator=True
# Set the the Curses and WebUI interface left menu plugin list (comma-separated)
#left_menu=network,wifi,connections,ports,diskio,fs,irq,folders,raid,smart,sensors,now
# Limit the number of processes to display (in the WebUI)
#max_processes_display=25
#
# Specifics options for TUI
#--------------------------
# Disable background color
#disable_bg=True
#
# Specifics options for WebUI
#----------------------------
# Set URL prefix for the WebUI and the API
# Example: url_prefix=/glances/ => http://localhost/glances/
# Note: The final / is mandatory
# Default is no prefix (/)
#url_prefix=/glances/
# Set root path for WebUI statics files
# Why ? On Debian system, WebUI statics files are not provided.
# You can download it in a specific folder
# thanks to https://github.com/nicolargo/glances/issues/2021
# then configure this folder with the webui_root_path key
# Default is folder where glances_restful_api.py is hosted
#webui_root_path=
# CORS options
# Comma separated list of origins that should be permitted to make cross-origin requests.
# Default is *
#cors_origins=*
# Indicate that cookies should be supported for cross-origin requests.
# Default is True
#cors_credentials=True
# Comma separated list of HTTP methods that should be allowed for cross-origin requests.
# Default is *
#cors_methods=*
# Comma separated list of HTTP request headers that should be supported for cross-origin requests.
# Default is *
#cors_headers=*
# Define SSL files (keyfile_password is optional)
#ssl_keyfile_password=kfp
#ssl_keyfile=./glances.local+3-key.pem
#ssl_certfile=./glances.local+3.pem
# Theme name for the Curses interface: black or white
curse_theme=black
# Limit the number of processes to display in the WebUI
max_processes_display=30
##############################################################################
# Plugins
# plugins
##############################################################################
[quicklook]
# Set to true to disable a plugin
# Note: you can also disable it from the command line (see --disable-plugin <plugin_name>)
disable=False
# Stats list (default is cpu,mem,load)
# Available stats are: cpu,mem,load,swap
list=cpu,mem,load
# Graphical bar char used in the terminal user interface (default is |)
bar_char=|
# Graphical percentage char used in the terminal user interface (default is |)
percentage_char=|
# Define CPU, MEM and SWAP thresholds in %
cpu_careful=50
cpu_warning=70
@ -92,11 +45,6 @@ mem_critical=90
swap_careful=50
swap_warning=70
swap_critical=90
# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
# With 1 CPU core, the load should be lower than 1.00 ~ 100%
load_careful=70
load_warning=100
load_critical=500
[system]
# This plugin display the first line in the Glances UI with:
@ -105,9 +53,6 @@ load_critical=500
disable=False
# Default refresh rate is 60 seconds
#refresh=60
# System information to display (a string where {key} will be replaced by the value)
# Available information are: hostname, os_name, os_version, os_arch, linux_distro, platform
#system_info_msg= | My {os_name} system |
[cpu]
disable=False
@ -131,7 +76,7 @@ user_careful=50
user_warning=70
user_critical=90
user_log=False
#user_critical_action=echo "{{time}} User CPU {{user}} higher than {{critical}}" > /tmp/cpu.alert
#user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert
#
system_careful=50
system_warning=70
@ -144,18 +89,13 @@ steal_critical=90
#steal_log=True
#
# Context switch limit (core / second)
# Leave commented to just use the default config critical is 50000*(Logical CPU cores)
# Leave commented to just use the default config (critical is 50000*# (Logical CPU cores)
#ctx_switches_careful=10000
#ctx_switches_warning=12000
#ctx_switches_critical=14000
[percpu]
disable=False
# Define the maximum number of CPU displayed at a time
# If the number of CPU is higher than the one configured in max_cpu_display then:
# - display top 'max_cpu_display' (sorted by CPU consumption)
# - a last line will be added with the mean of all other CPUs
max_cpu_display=4
# Define CPU thresholds in %
# Default values if not defined: 50/70/90
user_careful=50
@ -178,21 +118,15 @@ proc_critical=90
mem_careful=50
mem_warning=70
mem_critical=90
# Temperature
temperature_careful=60
temperature_warning=70
temperature_critical=80
[mem]
disable=False
# Display available memory instead of used memory
#available=True
# Define RAM thresholds in %
# Default values if not defined: 50/70/90
careful=50
#careful_action_repeat=echo {{percent}} >> /tmp/memory.alert
warning=70
critical=90
#critical_action_repeat=echo "{{time}} {{percent}} higher than {{critical}}"" >> /tmp/memory.alert
[memswap]
disable=False
@ -201,7 +135,6 @@ disable=False
careful=50
warning=70
critical=90
#warning_action=echo "{{time}} {{percent}} higher than {{warning}}"" > /tmp/memory.alert
[load]
disable=False
@ -229,15 +162,8 @@ tx_critical=90
hide=docker.*,lo
# Define the list of wireless network interfaces to be show (comma-separated)
#show=docker.*
# Automatically hide interface not up (default is False)
hide_no_up=True
# Automatically hide interface with no IP address (default is False)
hide_no_ip=True
# Set hide_zero to True to automatically hide interface with no traffic
hide_zero=False
# Set hide_threshold_bytes to an integer value to automatically hide
# interface with traffic less or equal than this value
#hide_threshold_bytes=0
# WLAN 0 alias
#wlan0_alias=Wireless
# It is possible to overwrite the bitrate thresholds per interface
# WLAN 0 Default limits (in bits per second aka bps) for interface bitrate
#wlan0_rx_careful=4000000
@ -248,38 +174,24 @@ hide_zero=False
#wlan0_tx_warning=900000
#wlan0_tx_critical=1000000
#wlan0_tx_log=True
#wlan0_rx_critical_action=echo "{{time}} {{interface_name}} RX {{bytes_recv_rate_per_sec}}Bps" > /tmp/network.alert
# Alias for network interface name
#alias=wlp0s20f3:WIFI
[ip]
# Disable display of private IP address
disable=False
# Configure the online service where public IP address information will be downloaded
# - public_disabled: Disable public IP address information (set to True for offline platform)
# - public_refresh_interval: Refresh interval between to calls to the online service
# - public_api: URL of the API (the API should return an JSON object)
# - public_username: Login for the online service (if needed)
# - public_password: Password for the online service (if needed)
# - public_field: Field name of the public IP address in onlibe service JSON message
# - public_template: Template to build the public message
#
# Example for IPLeak service:
# public_api=https://ipv4.ipleak.net/json/
# public_field=ip
# public_template={ip} {continent_name}/{country_name}/{city_name}
#
public_disabled=True
public_refresh_interval=300
public_api=https://ipv4.ipleak.net/json/
#public_username=<myname>
#public_password=<mysecret>
public_field=ip
public_template={continent_name}/{country_name}/{city_name}
public_ip_disabled=False
# Configuration for the Censys online service
# Need to create an aacount: https://censys.io/login
censys_url=https://search.censys.io/api
# Get your own credential here: https://search.censys.io/account/api
# Enter your credential and uncomment the following lines
#censys_username=<censys_api_id>
#censys_password=<censys_secret>
# List of fields to be displayed in user interface (comma separated)
censys_fields=location:continent,location:country,autonomous_system:name
[connections]
# Display additional information about TCP connections
# This plugin is disabled by default because it consumes lots of CPU
# This plugin is disabled by default
disable=True
# nf_conntrack thresholds in %
nf_conntrack_percent_careful=70
@ -287,8 +199,12 @@ nf_conntrack_percent_warning=80
nf_conntrack_percent_critical=90
[wifi]
disable=False
# Define SIGNAL thresholds in dBm (lower is better...)
disable=True
# Define the list of hidden wireless network interfaces (comma-separated regexp)
hide=lo,docker.*
# Define the list of wireless network interfaces to be show (comma-separated)
#show=docker.*
# Define SIGNAL thresholds in db (lower is better...)
# Based on: http://serverfault.com/questions/501025/industry-standard-for-minimum-wifi-signal-strength
careful=-65
warning=-75
@ -299,63 +215,26 @@ disable=False
# Define the list of hidden disks (comma-separated regexp)
#hide=sda2,sda5,loop.*
hide=loop.*,/dev/loop.*
# Set hide_zero to True to automatically hide disk with no read/write
hide_zero=False
# Set hide_threshold_bytes to an integer value to automatically hide
# interface with traffic less or equal than this value
#hide_threshold_bytes=0
# Define the list of disks to be show (comma-separated)
#show=sda.*
# Alias for sda1 and sdb1
#alias=sda1:SystemDisk,sdb1:DataDisk
# Default latency thresholds (in ms) (rx = read / tx = write)
rx_latency_careful=10
rx_latency_warning=20
rx_latency_critical=50
tx_latency_careful=10
tx_latency_warning=20
tx_latency_critical=50
# Set latency thresholds (latency in ms) for a given disk name (rx = read / tx = write)
# dm-0_rx_latency_careful=10
# dm-0_rx_latency_warning=20
# dm-0_rx_latency_critical=50
# dm-0_rx_latency_log=False
# dm-0_tx_latency_careful=10
# dm-0_tx_latency_warning=20
# dm-0_tx_latency_critical=50
# dm-0_tx_latency_log=False
# There is no default bitrate thresholds for disk (because it is not possible to know the disk speed)
# Set bitrate thresholds (in bytes per second) for a given disk name (rx = read / tx = write)
#dm-0_rx_careful=4000000000
#dm-0_rx_warning=5000000000
#dm-0_rx_critical=6000000000
#dm-0_rx_log=False
#dm-0_tx_careful=700000000
#dm-0_tx_warning=900000000
#dm-0_tx_critical=1000000000
#dm-0_tx_log=False
# Alias for sda1
#sda1_alias=InternalDisk
[fs]
disable=False
# Define the list of file system to hide (comma-separated regexp)
hide=/boot.*,.*/snap.*
hide=/boot.*,/snap.*
# Define the list of file system to show (comma-separated regexp)
#show=/,/srv
# Define filesystem space thresholds in %
# Default values if not defined: 50/70/90
# It is also possible to define per mount point value
# Example: /_careful=40
careful=50
warning=70
critical=90
# It is also possible to define per mount point value
# Example: /_careful=40
#/_careful=1
#/_warning=5
#/_critical=10
#/_critical_action=echo "{{time}} {{mnt_point}} filesystem space {{percent}}% higher than {{critical}}%" > /tmp/fs.alert
# Allow additional file system types (comma-separated FS type)
#allow=shm
# Alias for root file system
#alias=/:Root,/zfspool:ZFS
[irq]
# Documentation: https://glances.readthedocs.io/en/latest/aoa/irq.html
@ -398,12 +277,6 @@ disable=True
# Documentation: https://glances.readthedocs.io/en/latest/aoa/smart.html
# This plugin is disabled by default
disable=True
# Define the list of sensors to hide (comma-separated regexp)
#hide=.*Hide_this_driver.*
# Define the list of sensors to show (comma-separated regexp)
#show=.*Drive_Temperature.*
# List of attributes to hide (comma separated)
#hide_attributes=Self-tests,Errors
[hddtemp]
disable=False
@ -414,39 +287,32 @@ port=7634
[sensors]
# Documentation: https://glances.readthedocs.io/en/latest/aoa/sensors.html
disable=False
# Set the refresh multiplicator for the sensors
# By default refresh every Glances refresh * 5 (increase to reduce CPU consumption)
#refresh=5
# Hide some sensors (comma separated list of regexp)
hide=unknown.*
# Show only the following sensors (comma separated list of regexp)
#show=CPU.*
# By default refresh every refresh time * 2
#refresh=6
# Hide some sensors
#hide=ambient
# Sensors core thresholds (in Celsius...)
# By default values are grabbed from the system
# Overwrite thresholds for a specific sensor
# temperature_core_Ambient_careful=40
# temperature_core_Ambient_warning=60
# temperature_core_Ambient_critical=85
# temperature_core_Ambient_log=True
# temperature_core_Ambient_critical_action=echo "{{time}} {{label}} temperature {{value}}{{unit}} higher than {{critical}}{{unit}}" > /tmp/temperature.alert
# Overwrite thresholds for a specific type of sensor
#temperature_core_careful=45
#temperature_core_warning=65
# Default values are grabbed from the system
#temperature_core_careful=60
#temperature_core_warning=70
#temperature_core_critical=80
# Temperatures threshold in °C for hddtemp
# Default values if not defined: 45/52/60
#temperature_hdd_careful=45
#temperature_hdd_warning=52
#temperature_hdd_critical=60
temperature_hdd_careful=45
temperature_hdd_warning=52
temperature_hdd_critical=60
# Battery threshold in %
# Default values if not defined: 70/80/90
#battery_careful=70
#battery_warning=80
#battery_critical=90
# Fan speed threshold in RPM
#fan_speed_careful=100
battery_careful=80
battery_warning=90
battery_critical=95
# Sensors alias
#alias=core 0:CPU Core 0,core 1:CPU Core 1
#temp1_alias=Motherboard 0
#temp2_alias=Motherboard 1
#core 0_temperature_core_alias=CPU Core 0 temp
#core 0_fans_speed_alias=CPU Core 0 fan
#or
#core 0_alias=CPU Core 0
#core 1_alias=CPU Core 1
[processcount]
disable=False
@ -459,12 +325,6 @@ disable=False
# Should be one of the following:
# cpu_percent, memory_percent, io_counters, name, cpu_times, username
#sort_key=memory_percent
# List of stats to disable (not grabed and not display)
# Stats that can be disabled: cpu_percent,memory_info,memory_percent,username,cpu_times,num_threads,nice,status,io_counters,cmdline
# Stats that can not be disable: pid,name
#disable_stats=cpu_percent,memory_info,memory_percent,username,cpu_times,num_threads,nice,status,io_counters,cmdline
# Disable display of virtual memory
#disable_virtual_memory=True
# Define CPU/MEM (per process) thresholds in %
# Default values if not defined: 50/70/90
cpu_careful=50
@ -475,26 +335,15 @@ mem_warning=70
mem_critical=90
#
# Nice priorities range from -20 to 19.
# Configure nice levels using a comma-separated list.
# Configure nice levels using a comma separated list.
#
# Nice: Example 1, non-zero is warning (default behavior)
nice_warning=-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
#
# Nice: Example 2, low priority processes escalate from careful to critical
#nice_ok=O
#nice_careful=1,2,3,4,5,6,7,8,9
#nice_warning=10,11,12,13,14
#nice_critical=15,16,17,18,19
#
# Status: define threshold regarding the process status (first letter of process status)
# R: Running, S: Sleeping, Z: Zombie (complete list here https://psutil.readthedocs.io/en/latest/#process-status-constants)
status_ok=R,W,P,I
status_critical=Z,D
# Define the list of processes to export using:
# a comma-separated list of Glances filter
#export=.*firefox.*,pid:1234
# Define a list of process to focus on (comma-separated list of Glances filter)
#focus=.*firefox.*,.*python.*
[ports]
disable=False
@ -542,87 +391,54 @@ port_default_gateway=True
#web_4_url=https://blog.nicolargo.com/nonexist
#web_4_description=Intranet
[vms]
disable=True
# Define the maximum VMs size name (default is 20 chars)
max_name_size=20
# By default, Glances only display running VMs with states:
# 'Running', 'Paused', 'Starting' or 'Restarting'
# Set the following key to True to display all VMs regarding their states
all=False
[containers]
disable=False
# Only show specific containers (comma-separated list of container name or regular expression)
# Only show specific containers (comma separated list of container name or regular expression)
# Comment this line to display all containers (default configuration)
; show=telegraf
# Hide some containers (comma-separated list of container name or regular expression)
#show=telegraf
# Hide some containers (comma separated list of container name or regular expression)
# Comment this line to display all containers (default configuration)
; hide=telegraf
#hide=telegraf
# Define the maximum docker size name (default is 20 chars)
max_name_size=20
# List of stats to disable (not display)
# Following stats can be disabled: name,status,uptime,cpu,mem,diskio,networkio,ports,command
disable_stats=command
#cpu_careful=50
# Thresholds for CPU and MEM (in %)
; cpu_careful=50
; cpu_warning=70
; cpu_critical=90
; mem_careful=20
; mem_warning=50
; mem_critical=70
#cpu_warning=70
#cpu_critical=90
#mem_careful=20
#mem_warning=50
#mem_critical=70
#
# Per container thresholds
; containername_cpu_careful=10
; containername_cpu_warning=20
; containername_cpu_critical=30
#containername_cpu_careful=10
#containername_cpu_warning=20
#containername_cpu_critical=30
#
# By default, Glances only display running containers
# Set the following key to True to display all containers
all=False
# Define Podman sock
; podman_sock=unix:///run/user/1000/podman/podman.sock
#podman_sock=unix:///run/user/1000/podman/podman.sock
[amps]
# AMPs configuration are defined in the bottom of this file
disable=False
[alert]
disable=False
# Maximum number of events to display (default is 10 events)
;max_events=10
# Minimum duration for an event to be taken into account (default is 6 seconds)
;min_duration=6
# Minimum time between two events of the same type (default is 6 seconds)
# This is used to avoid too many alerts for the same event
# Events will be merged
;min_interval=6
##############################################################################
# Browser mode - Static servers definition
# Client/server
##############################################################################
[serverlist]
# Define columns (comma separated list of <plugin>:<field>:(<key>)) to grab/display
# Default is: system:hr_name,load:min5,cpu:total,mem:percent
# You can also add stats with key, like sensors:value:Ambient (key is case sensitive)
#columns=system:hr_name,load:min5,cpu:total,mem:percent,memswap:percent,sensors:value:Ambient,sensors:value:Composite
# Define the static servers list
# _protocol can be: rpc (default if not defined) or rest
# List is limited to 256 servers max (1 to 256)
#server_1_name=localhost
#server_1_alias=Local WebUI
#server_1_port=61266
#server_1_protocol=rest
#server_1_alias=My local PC
#server_1_port=61209
#server_2_name=localhost
#server_2_alias=My local PC
#server_2_port=61209
#server_2_protocol=rpc
#server_2_port=61235
#server_3_name=192.168.0.17
#server_3_alias=Another PC on my network
#server_3_port=61209
#server_1_protocol=rpc
#server_4_name=notagooddefinition
#server_4_name=pasbon
#server_4_port=61237
[passwords]
@ -641,16 +457,11 @@ disable=False
# Exports
##############################################################################
[export]
# Common section for all exporters
# Do not export following fields (comma separated list of regex)
#exclude_fields=.*_critical,.*_careful,.*_warning,.*\.key$
[graph]
# Configuration for the --export graph option
# Set the path where the graph (.svg files) will be created
# Can be overwrite by the --graph-path command line option
path=/tmp/glances
path=/tmp
# It is possible to generate the graphs automatically by setting the
# generate_every to a non zero value corresponding to the seconds between
# two generation. Set it to 0 to disable graph auto generation.
@ -664,7 +475,7 @@ style=DarkStyle
[influxdb]
# !!!
# Will be DEPRECATED in future release.
# Please have a look on the new influxdb3 export module
# Please have a look on the new influxdb2 export module (compatible with InfluxDB 1.8.x and 2.x)
# !!!
# Configuration for the --export influxdb option
# https://influxdb.com/
@ -682,7 +493,7 @@ db=glances
#prefix=foo
# Following tags will be added for all measurements
# You can also use dynamic values.
# Note: hostname and name (for process) are always added as a tag
# Note: hostname is always added as a tag
#tags=foo:bar,spam:eggs,domain:`domainname`
[influxdb2]
@ -693,7 +504,7 @@ port=8086
protocol=http
org=nicolargo
bucket=glances
token=PUT_YOUR_INFLUXDB2_TOKEN_HERE
token=EjFUTWe8U-MIseEAkaVIgVnej_TrnbdvEcRkaB1imstW7gapSqy6_6-8XD-yd51V0zUUpDy-kAdVD1purDLuxA==
# Set the interval between two exports (in seconds)
# If the interval is set to 0, the Glances refresh time is used (default behavor)
#interval=0
@ -705,28 +516,7 @@ token=PUT_YOUR_INFLUXDB2_TOKEN_HERE
#prefix=foo
# Following tags will be added for all measurements
# You can also use dynamic values.
# Note: hostname and name (for process) are always added as a tag
#tags=foo:bar,spam:eggs,domain:`domainname`
[influxdb3]
# Configuration for the --export influxdb3 option
# https://influxdb.com/
host=http://localhost:8181
org=nicolargo
database=glances
token=PUT_YOUR_INFLUXDB3_TOKEN_HERE
# Set the interval between two exports (in seconds)
# If the interval is set to 0, the Glances refresh time is used (default behavor)
#interval=0
# Prefix will be added for all measurement name
# Ex: prefix=foo
# => foo.cpu
# => foo.mem
# You can also use dynamic values
#prefix=foo
# Following tags will be added for all measurements
# You can also use dynamic values.
# Note: hostname and name (for process) are always added as a tag
# Note: hostname is always added as a tag
#tags=foo:bar,spam:eggs,domain:`domainname`
[cassandra]
@ -786,15 +576,12 @@ queue=glances_queue
[mqtt]
# Configuration for the --export mqtt option
host=localhost
# Overwrite device name in the topic
#devicename=localhost
port=8883
tls=false
user=guest
password=guest
topic=glances
topic_structure=per-metric
callback_api_version=2
[couchdb]
# Configuration for the --export couchdb option
@ -802,8 +589,10 @@ callback_api_version=2
host=localhost
port=5984
db=glances
user=admin
password=admin
# user and password are optional (comment if not configured on the server side)
# If they are used, then the https protocol will be used
#user=root
#password=root
[mongodb]
# Configuration for the --export mongodb option
@ -880,26 +669,6 @@ prefix=glances
# By default, system_name = FQDN
#system_name=mycomputer
[timescaledb]
# Configuration for the --export timescaledb option
# https://www.timescale.com/
host=localhost
port=5432
db=glances
user=postgres
password=password
# Overwrite device name (default is the FQDN)
# Most of the time, you should not overwrite this value
#hostname=mycomputer
[nats]
# Configuration for the --export nats option
# https://nats.io/
# Host is a separated list of NATS nodes
host=nats://localhost:4222
# Prefix for the subjects (default is 'glances')
prefix=glances
##############################################################################
# AMPS
# * enable: Enable (true) or disable (false) the AMP
@ -935,13 +704,13 @@ refresh=3
countmax=20
[amp_conntrack]
# Use && separator for multiple commands
# Use comma separated for multiple commands (no space around the comma)
# If the regex key is not defined, the AMP will be executed every refresh second
# and the process count will not be displayed (countmin and countmax will be ignore)
enable=false
refresh=30
one_line=false
command=sysctl net.netfilter.nf_conntrack_count && sysctl net.netfilter.nf_conntrack_max
command=sysctl net.netfilter.nf_conntrack_count;sysctl net.netfilter.nf_conntrack_max
[amp_nginx]
# Use the NGinx AMP

View File

@ -1,395 +1,14 @@
# This file was autogenerated by uv via the following command:
# uv export --no-hashes --only-dev --output-file dev-requirements.txt
alabaster==1.0.0
# via sphinx
annotated-types==0.7.0
# via pydantic
anyio==4.12.0
# via
# httpx
# mcp
# sse-starlette
# starlette
attrs==25.4.0
# via
# glom
# jsonschema
# outcome
# referencing
# reuse
# semgrep
# trio
babel==2.17.0
# via sphinx
boltons==21.0.0
# via
# face
# glom
# semgrep
boolean-py==5.0
# via license-expression
bracex==2.6
# via wcmatch
certifi==2025.11.12
# via
# httpcore
# httpx
# requests
# selenium
cffi==2.0.0 ; (implementation_name != 'pypy' and os_name == 'nt') or platform_python_implementation != 'PyPy'
# via
# cryptography
# trio
cfgv==3.5.0
# via pre-commit
charset-normalizer==3.4.4
# via
# python-debian
# requests
click==8.1.8
# via
# click-option-group
# reuse
# semgrep
# typer
# uvicorn
click-option-group==0.5.9
# via semgrep
codespell==2.4.1
colorama==0.4.6
# via
# click
# pytest
# semgrep
# sphinx
contourpy==1.3.2 ; python_full_version < '3.11'
# via matplotlib
contourpy==1.3.3 ; python_full_version >= '3.11'
# via matplotlib
cryptography==46.0.3
# via pyjwt
cycler==0.12.1
# via matplotlib
distlib==0.4.0
# via virtualenv
docutils==0.21.2
# via
# rstcheck-core
# sphinx
# sphinx-rtd-theme
exceptiongroup==1.2.2
# via
# anyio
# pytest
# semgrep
# trio
# trio-websocket
face==24.0.0
# via glom
filelock==3.20.2
# via virtualenv
fonttools==4.61.1
# via matplotlib
glom==22.1.0
# via semgrep
googleapis-common-protos==1.72.0
# via opentelemetry-exporter-otlp-proto-http
gprof2dot==2025.4.14
h11==0.16.0
# via
# httpcore
# uvicorn
# wsproto
httpcore==1.0.9
# via httpx
httpx==0.28.1
# via mcp
httpx-sse==0.4.3
# via mcp
identify==2.6.15
# via pre-commit
idna==3.11
# via
# anyio
# httpx
# requests
# trio
imagesize==1.4.1
# via sphinx
importlib-metadata==8.7.1
# via opentelemetry-api
iniconfig==2.3.0
# via pytest
jinja2==3.1.6
# via
# reuse
# sphinx
jsonschema==4.25.1
# via
# mcp
# semgrep
jsonschema-specifications==2025.9.1
# via jsonschema
kiwisolver==1.4.9
# via matplotlib
license-expression==30.4.4
# via reuse
markdown-it-py==4.0.0
# via rich
markupsafe==3.0.3
# via jinja2
matplotlib==3.10.8
mcp==1.23.3
# via semgrep
mdurl==0.1.2
# via markdown-it-py
memory-profiler==0.61.0
nodeenv==1.10.0
# via
# pre-commit
# pyright
numpy==2.2.6 ; python_full_version < '3.11'
# via
# contourpy
# matplotlib
numpy==2.4.0 ; python_full_version >= '3.11'
# via
# contourpy
# matplotlib
opentelemetry-api==1.37.0
# via
# opentelemetry-exporter-otlp-proto-http
# opentelemetry-instrumentation
# opentelemetry-instrumentation-requests
# opentelemetry-sdk
# opentelemetry-semantic-conventions
# semgrep
opentelemetry-exporter-otlp-proto-common==1.37.0
# via opentelemetry-exporter-otlp-proto-http
opentelemetry-exporter-otlp-proto-http==1.37.0
# via semgrep
opentelemetry-instrumentation==0.58b0
# via opentelemetry-instrumentation-requests
opentelemetry-instrumentation-requests==0.58b0
# via semgrep
opentelemetry-proto==1.37.0
# via
# opentelemetry-exporter-otlp-proto-common
# opentelemetry-exporter-otlp-proto-http
opentelemetry-sdk==1.37.0
# via
# opentelemetry-exporter-otlp-proto-http
# semgrep
opentelemetry-semantic-conventions==0.58b0
# via
# opentelemetry-instrumentation
# opentelemetry-instrumentation-requests
# opentelemetry-sdk
opentelemetry-util-http==0.58b0
# via opentelemetry-instrumentation-requests
outcome==1.3.0.post0
# via
# trio
# trio-websocket
packaging==25.0
# via
# matplotlib
# opentelemetry-instrumentation
# pytest
# requirements-parser
# semgrep
# sphinx
# webdriver-manager
peewee==3.18.3
# via semgrep
pillow==12.1.0
# via matplotlib
platformdirs==4.5.1
# via virtualenv
pluggy==1.6.0
# via pytest
pre-commit==4.5.1
protobuf==6.33.2
# via
# googleapis-common-protos
# opentelemetry-proto
psutil==7.2.1
# via memory-profiler
py-spy==0.4.1
pycparser==2.23 ; (implementation_name != 'PyPy' and implementation_name != 'pypy' and os_name == 'nt') or (implementation_name != 'PyPy' and platform_python_implementation != 'PyPy')
# via cffi
pydantic==2.12.5
# via
# mcp
# pydantic-settings
# rstcheck-core
pydantic-core==2.41.5
# via pydantic
pydantic-settings==2.12.0
# via mcp
pygments==2.19.2
# via
# pytest
# rich
# sphinx
pyinstrument==5.1.1
pyjwt==2.10.1
# via mcp
pyparsing==3.3.1
# via matplotlib
pyright==1.1.407
pysocks==1.7.1
# via urllib3
pytest==9.0.2
python-dateutil==2.9.0.post0
# via matplotlib
python-debian==1.0.1
# via reuse
python-dotenv==1.2.1
# via
# pydantic-settings
# webdriver-manager
python-magic==0.4.27
# via reuse
python-multipart==0.0.21
# via mcp
pywin32==311 ; sys_platform == 'win32'
# via
# mcp
# semgrep
pyyaml==6.0.3
# via pre-commit
referencing==0.37.0
# via
# jsonschema
# jsonschema-specifications
requests==2.32.5
# via
# opentelemetry-exporter-otlp-proto-http
# semgrep
# sphinx
# webdriver-manager
requirements-parser==0.13.0
reuse==6.2.0
rich==13.5.3
# via
# semgrep
# typer
roman-numerals==4.1.0 ; python_full_version >= '3.11'
# via roman-numerals-py
roman-numerals-py==4.1.0 ; python_full_version >= '3.11'
# via sphinx
rpds-py==0.30.0
# via
# jsonschema
# referencing
rstcheck==6.2.5
rstcheck-core==1.2.2
# via rstcheck
ruamel-yaml==0.19.1
# via semgrep
ruamel-yaml-clib==0.2.14
# via semgrep
ruff==0.14.10
selenium==4.39.0
semgrep==1.146.0
setuptools==80.9.0
shellingham==1.5.4
# via typer
six==1.17.0
# via python-dateutil
sniffio==1.3.1
# via trio
snowballstemmer==3.0.1
# via sphinx
sortedcontainers==2.4.0
# via trio
sphinx==8.1.3 ; python_full_version < '3.11'
# via
# sphinx-rtd-theme
# sphinxcontrib-jquery
sphinx==8.2.3 ; python_full_version >= '3.11'
# via
# sphinx-rtd-theme
# sphinxcontrib-jquery
sphinx-rtd-theme==3.0.2
sphinxcontrib-applehelp==2.0.0
# via sphinx
sphinxcontrib-devhelp==2.0.0
# via sphinx
sphinxcontrib-htmlhelp==2.1.0
# via sphinx
sphinxcontrib-jquery==4.1
# via sphinx-rtd-theme
sphinxcontrib-jsmath==1.0.1
# via sphinx
sphinxcontrib-qthelp==2.0.0
# via sphinx
sphinxcontrib-serializinghtml==2.0.0
# via sphinx
sse-starlette==3.1.2
# via mcp
starlette==0.50.0
# via
# mcp
# sse-starlette
tomli==2.0.2
# via
# pytest
# semgrep
# sphinx
tomlkit==0.13.3
# via reuse
trio==0.32.0
# via
# selenium
# trio-websocket
trio-websocket==0.12.2
# via selenium
typer==0.21.0
# via rstcheck
typing-extensions==4.15.0
# via
# anyio
# cryptography
# mcp
# opentelemetry-api
# opentelemetry-exporter-otlp-proto-http
# opentelemetry-sdk
# opentelemetry-semantic-conventions
# pydantic
# pydantic-core
# pyright
# referencing
# selenium
# semgrep
# starlette
# typer
# typing-inspection
# uvicorn
# virtualenv
typing-inspection==0.4.2
# via
# mcp
# pydantic
# pydantic-settings
urllib3==2.6.2
# via
# requests
# selenium
# semgrep
uvicorn==0.40.0 ; sys_platform != 'emscripten'
# via mcp
virtualenv==20.35.4
# via pre-commit
wcmatch==8.5.2
# via semgrep
webdriver-manager==4.0.2
websocket-client==1.9.0
# via selenium
wrapt==1.17.3
# via opentelemetry-instrumentation
wsproto==1.3.2
# via trio-websocket
zipp==3.23.0
# via importlib-metadata
py-spy
black
pyright
requirements-parser
flake8
autopep8
autoflake
ruff
codespell
memory-profiler
matplotlib
semgrep
setuptools>=65.5.1 # not directly required, pinned by Snyk to avoid a vulnerability
numpy>=1.22.2 # not directly required, pinned by Snyk to avoid a vulnerability

4
doc-requirements.txt Normal file
View File

@ -0,0 +1,4 @@
sphinx
sphinx_rtd_theme
reuse
setuptools>=65.5.1 # not directly required, pinned by Snyk to avoid a vulnerability

2
docker-bin.sh Executable file → Normal file
View File

@ -1,3 +1,3 @@
#!/bin/sh
/venv/bin/python3 -m glances "$@"
/venv/bin/python3 -m glances $@

View File

@ -0,0 +1,3 @@
FROM nicolargo/glances:latest as glancesminimal
COPY glances.conf /glances/conf/glances.conf
CMD python -m glances -C /glances/conf/glances.conf $GLANCES_OPT

View File

@ -0,0 +1,39 @@
version: "3.9"
services:
reverse-proxy:
image: traefik
command: --api --docker
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
whoami:
image: emilevauge/whoami
labels:
- "traefik.frontend.rule=Host:whoami.docker.localhost"
monitoring:
image: nicolargo/glances:dev
restart: unless-stopped
pid: host
privileged: true
network_mode: "host"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "/run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro"
- "./glances.conf:/glances/conf/glances.conf"
environment:
- GLANCES_OPT: "-C /glances/conf/glances.conf -w"
- TZ: "${TZ}"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
labels:
- "traefik.port=61208"
- "traefik.frontend.rule=Host:glances.docker.localhost"

View File

@ -1,55 +1,24 @@
version: '3.9'
services:
glances:
# See all images tags here: https://hub.docker.com/r/nicolargo/glances/tags
image: nicolargo/glances:latest-full
build:
context: ./
dockerfile: Dockerfile
restart: always
pid: "host"
privileged: true
network_mode: "host"
read_only: true
privileged: false
# Uncomment next line for SATA or NVME smartctl monitoring
# cap_add:
# Uncomment next line for SATA smartctl monitoring
# - SYS_RAWIO
# Uncomment next line for NVME smartctl monitoring
# - SYS_ADMIN
# devices:
# - "/dev/nvme0"
volumes:
- "/:/rootfs:ro"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "/run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro"
- "./glances.conf:/glances/conf/glances.conf"
# Uncomment for proper distro information in upper panel.
# # Works only for distros that do have this file (most of distros do).
# - "/etc/os-release:/etc/os-release:ro"
tmpfs:
- /tmp
environment:
# Please set to your local timezone (or use local ${TZ} environment variable if set on your host)
- TZ=Europe/Paris
- GLANCES_OPT=-C /glances/conf/glances.conf -w --enable-plugin smart
- PYTHONPYCACHEPREFIX=/tmp/py_caches
# # Uncomment for GPU compatibility (Nvidia) inside the container
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities: [gpu]
# Uncomment to protect Glances WebUI by a login/password (add --password to GLANCES_OPT)
# secrets:
# - source: glances_password
# target: /root/.config/glances/<login>.pwd
# secrets:
# glances_password:
# file: ./secrets/glances_password
- GLANCES_OPT: "-C /glances/conf/glances.conf -w"
- TZ: "${TZ}"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]

View File

@ -13,75 +13,28 @@ check_update=False
# Default is 1200 values (~1h with the default refresh rate)
history_size=1200
# Set the way Glances should display the date (default is %Y-%m-%d %H:%M:%S %Z)
#strftime_format=%Y-%m-%d %H:%M:%S %Z
# Define external directory for loading additional plugins
# The layout follows the glances standard for plugin definitions
#plugin_dir=/home/user/dev/plugins
#strftime_format="%Y-%m-%d %H:%M:%S %Z"
##############################################################################
# User interface
##############################################################################
[outputs]
# Options for all UIs
#--------------------
# Separator in the Curses and WebUI interface (between top and others plugins)
#separator=True
# Set the the Curses and WebUI interface left menu plugin list (comma-separated)
#left_menu=network,wifi,connections,ports,diskio,fs,irq,folders,raid,smart,sensors,now
# Limit the number of processes to display (in the WebUI)
max_processes_display=25
#
# Specifics options for TUI
#--------------------------
# Disable background color
#disable_bg=True
#
# Specifics options for WebUI
#----------------------------
# Set URL prefix for the WebUI and the API
# Example: url_prefix=/glances/ => http://localhost/glances/
# Note: The final / is mandatory
# Default is no prefix (/)
#url_prefix=/glances/
# Set root path for WebUI statics files
# Why ? On Debian system, WebUI statics files are not provided.
# You can download it in a specific folder
# thanks to https://github.com/nicolargo/glances/issues/2021
# then configure this folder with the webui_root_path key
# Default is folder where glances_restful_api.py is hosted
#webui_root_path=
# CORS options
# Comma separated list of origins that should be permitted to make cross-origin requests.
# Default is *
#cors_origins=*
# Indicate that cookies should be supported for cross-origin requests.
# Default is True
#cors_credentials=True
# Comma separated list of HTTP methods that should be allowed for cross-origin requests.
# Default is *
#cors_methods=*
# Comma separated list of HTTP request headers that should be supported for cross-origin requests.
# Default is *
#cors_headers=*
# Define SSL files (keyfile_password is optional)
#ssl_keyfile_password=kfp
#ssl_keyfile=./glances.local+3-key.pem
#ssl_certfile=./glances.local+3.pem
# Theme name for the Curses interface: black or white
curse_theme=black
# Limit the number of processes to display in the WebUI
max_processes_display=30
##############################################################################
# Plugins
# plugins
##############################################################################
[quicklook]
# Set to true to disable a plugin
# Note: you can also disable it from the command line (see --disable-plugin <plugin_name>)
disable=False
# Stats list (default is cpu,mem,load)
# Available stats are: cpu,mem,load,swap
list=cpu,mem,load
# Graphical bar char used in the terminal user interface (default is |)
bar_char=|
# Graphical percentage char used in the terminal user interface (default is |)
percentage_char=|
# Define CPU, MEM and SWAP thresholds in %
cpu_careful=50
cpu_warning=70
@ -92,11 +45,6 @@ mem_critical=90
swap_careful=50
swap_warning=70
swap_critical=90
# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
# With 1 CPU core, the load should be lower than 1.00 ~ 100%
load_careful=70
load_warning=100
load_critical=500
[system]
# This plugin display the first line in the Glances UI with:
@ -105,9 +53,6 @@ load_critical=500
disable=False
# Default refresh rate is 60 seconds
#refresh=60
# System information to display (a string where {key} will be replaced by the value)
# Available information are: hostname, os_name, os_version, os_arch, linux_distro, platform
#system_info_msg= | My {os_name} system |
[cpu]
disable=False
@ -131,7 +76,7 @@ user_careful=50
user_warning=70
user_critical=90
user_log=False
#user_critical_action=echo "{{time}} User CPU {{user}} higher than {{critical}}" > /tmp/cpu.alert
#user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert
#
system_careful=50
system_warning=70
@ -144,18 +89,13 @@ steal_critical=90
#steal_log=True
#
# Context switch limit (core / second)
# Leave commented to just use the default config critical is 50000*(Logical CPU cores)
# Leave commented to just use the default config (critical is 50000*# (Logical CPU cores)
#ctx_switches_careful=10000
#ctx_switches_warning=12000
#ctx_switches_critical=14000
[percpu]
disable=False
# Define the maximum number of CPU displayed at a time
# If the number of CPU is higher than the one configured in max_cpu_display then:
# - display top 'max_cpu_display' (sorted by CPU consumption)
# - a last line will be added with the mean of all other CPUs
max_cpu_display=4
# Define CPU thresholds in %
# Default values if not defined: 50/70/90
user_careful=50
@ -178,21 +118,15 @@ proc_critical=90
mem_careful=50
mem_warning=70
mem_critical=90
# Temperature
temperature_careful=60
temperature_warning=70
temperature_critical=80
[mem]
disable=False
# Display available memory instead of used memory
#available=True
# Define RAM thresholds in %
# Default values if not defined: 50/70/90
careful=50
#careful_action_repeat=echo {{percent}} >> /tmp/memory.alert
warning=70
critical=90
#critical_action_repeat=echo "{{time}} {{percent}} higher than {{critical}}"" >> /tmp/memory.alert
[memswap]
disable=False
@ -201,7 +135,6 @@ disable=False
careful=50
warning=70
critical=90
#warning_action=echo "{{time}} {{percent}} higher than {{warning}}"" > /tmp/memory.alert
[load]
disable=False
@ -229,15 +162,8 @@ tx_critical=90
#hide=docker.*,lo
# Define the list of wireless network interfaces to be show (comma-separated)
#show=docker.*
# Automatically hide interface not up (default is False)
hide_no_up=True
# Automatically hide interface with no IP address (default is False)
hide_no_ip=True
# Set hide_zero to True to automatically hide interface with no traffic
hide_zero=False
# Set hide_threshold_bytes to an integer value to automatically hide
# interface with traffic less or equal than this value
#hide_threshold_bytes=0
# WLAN 0 alias
#wlan0_alias=Wireless
# It is possible to overwrite the bitrate thresholds per interface
# WLAN 0 Default limits (in bits per second aka bps) for interface bitrate
#wlan0_rx_careful=4000000
@ -248,38 +174,24 @@ hide_zero=False
#wlan0_tx_warning=900000
#wlan0_tx_critical=1000000
#wlan0_tx_log=True
#wlan0_rx_critical_action=echo "{{time}} {{interface_name}} RX {{bytes_recv_rate_per_sec}}Bps" > /tmp/network.alert
# Alias for network interface name
#alias=wlp0s20f3:WIFI
[ip]
# Disable display of private IP address
disable=False
# Configure the online service where public IP address information will be downloaded
# - public_disabled: Disable public IP address information (set to True for offline platform)
# - public_refresh_interval: Refresh interval between to calls to the online service
# - public_api: URL of the API (the API should return an JSON object)
# - public_username: Login for the online service (if needed)
# - public_password: Password for the online service (if needed)
# - public_field: Field name of the public IP address in onlibe service JSON message
# - public_template: Template to build the public message
#
# Example for IPLeak service:
# public_api=https://ipv4.ipleak.net/json/
# public_field=ip
# public_template={ip} {continent_name}/{country_name}/{city_name}
#
public_disabled=True
public_refresh_interval=300
public_api=https://ipv4.ipleak.net/json/
#public_username=<myname>
#public_password=<mysecret>
public_field=ip
public_template={continent_name}/{country_name}/{city_name}
public_ip_disabled=False
# Configuration for the Censys online service
# Need to create an aacount: https://censys.io/login
censys_url=https://search.censys.io/api
# Get your own credential here: https://search.censys.io/account/api
# Enter your credential and uncomment the following lines
#censys_username=<censys_api_id>
#censys_password=<censys_secret>
# List of fields to be displayed in user interface (comma separated)
censys_fields=location:continent,location:country,autonomous_system:name
[connections]
# Display additional information about TCP connections
# This plugin is disabled by default because it consumes lots of CPU
# This plugin is disabled by default
disable=True
# nf_conntrack thresholds in %
nf_conntrack_percent_careful=70
@ -287,8 +199,12 @@ nf_conntrack_percent_warning=80
nf_conntrack_percent_critical=90
[wifi]
disable=False
# Define SIGNAL thresholds in dBm (lower is better...)
disable=True
# Define the list of hidden wireless network interfaces (comma-separated regexp)
hide=lo,docker.*
# Define the list of wireless network interfaces to be show (comma-separated)
#show=docker.*
# Define SIGNAL thresholds in db (lower is better...)
# Based on: http://serverfault.com/questions/501025/industry-standard-for-minimum-wifi-signal-strength
careful=-65
warning=-75
@ -299,63 +215,26 @@ disable=False
# Define the list of hidden disks (comma-separated regexp)
#hide=sda2,sda5,loop.*
hide=loop.*,/dev/loop.*
# Set hide_zero to True to automatically hide disk with no read/write
hide_zero=False
# Set hide_threshold_bytes to an integer value to automatically hide
# interface with traffic less or equal than this value
#hide_threshold_bytes=0
# Define the list of disks to be show (comma-separated)
#show=sda.*
# Alias for sda1 and sdb1
#alias=sda1:SystemDisk,sdb1:DataDisk
# Default latency thresholds (in ms) (rx = read / tx = write)
rx_latency_careful=10
rx_latency_warning=20
rx_latency_critical=50
tx_latency_careful=10
tx_latency_warning=20
tx_latency_critical=50
# Set latency thresholds (latency in ms) for a given disk name (rx = read / tx = write)
# dm-0_rx_latency_careful=10
# dm-0_rx_latency_warning=20
# dm-0_rx_latency_critical=50
# dm-0_rx_latency_log=False
# dm-0_tx_latency_careful=10
# dm-0_tx_latency_warning=20
# dm-0_tx_latency_critical=50
# dm-0_tx_latency_log=False
# There is no default bitrate thresholds for disk (because it is not possible to know the disk speed)
# Set bitrate thresholds (in bytes per second) for a given disk name (rx = read / tx = write)
#dm-0_rx_careful=4000000000
#dm-0_rx_warning=5000000000
#dm-0_rx_critical=6000000000
#dm-0_rx_log=False
#dm-0_tx_careful=700000000
#dm-0_tx_warning=900000000
#dm-0_tx_critical=1000000000
#dm-0_tx_log=False
# Alias for sda1
#sda1_alias=InternalDisk
[fs]
disable=False
# Define the list of file system to hide (comma-separated regexp)
hide=/boot.*,.*/snap.*
hide=/boot.*,/snap.*
# Define the list of file system to show (comma-separated regexp)
#show=/,/srv
# Define filesystem space thresholds in %
# Default values if not defined: 50/70/90
# It is also possible to define per mount point value
# Example: /_careful=40
careful=50
warning=70
critical=90
# It is also possible to define per mount point value
# Example: /_careful=40
#/_careful=1
#/_warning=5
#/_critical=10
#/_critical_action=echo "{{time}} {{mnt_point}} filesystem space {{percent}}% higher than {{critical}}%" > /tmp/fs.alert
# Allow additional file system types (comma-separated FS type)
#allow=shm
# Alias for root file system
#alias=/:Root,/zsfpool:ZSF
[irq]
# Documentation: https://glances.readthedocs.io/en/latest/aoa/irq.html
@ -398,12 +277,6 @@ disable=True
# Documentation: https://glances.readthedocs.io/en/latest/aoa/smart.html
# This plugin is disabled by default
disable=True
# Define the list of sensors to hide (comma-separated regexp)
#hide=.*Hide_this_driver.*
# Define the list of sensors to show (comma-separated regexp)
#show=.*Drive_Temperature.*
# List of attributes to hide (comma separated)
#hide_attributes=Self-tests,Errors
[hddtemp]
disable=False
@ -414,39 +287,32 @@ port=7634
[sensors]
# Documentation: https://glances.readthedocs.io/en/latest/aoa/sensors.html
disable=False
# Set the refresh multiplicator for the sensors
# By default refresh every Glances refresh * 5 (increase to reduce CPU consumption)
#refresh=5
# Hide some sensors (comma separated list of regexp)
hide=unknown.*
# Show only the following sensors (comma separated list of regexp)
#show=CPU.*
# By default refresh every refresh time * 2
#refresh=6
# Hide some sensors
#hide=ambient
# Sensors core thresholds (in Celsius...)
# By default values are grabbed from the system
# Overwrite thresholds for a specific sensor
# temperature_core_Ambient_careful=40
# temperature_core_Ambient_warning=60
# temperature_core_Ambient_critical=85
# temperature_core_Ambient_log=True
# temperature_core_Ambient_critical_action=echo "{{time}} {{label}} temperature {{value}}{{unit}} higher than {{critical}}{{unit}}" > /tmp/temperature.alert
# Overwrite thresholds for a specific type of sensor
#temperature_core_careful=45
#temperature_core_warning=65
# Default values are grabbed from the system
#temperature_core_careful=60
#temperature_core_warning=70
#temperature_core_critical=80
# Temperatures threshold in °C for hddtemp
# Default values if not defined: 45/52/60
#temperature_hdd_careful=45
#temperature_hdd_warning=52
#temperature_hdd_critical=60
temperature_hdd_careful=45
temperature_hdd_warning=52
temperature_hdd_critical=60
# Battery threshold in %
# Default values if not defined: 70/80/90
#battery_careful=70
#battery_warning=80
#battery_critical=90
# Fan speed threshold in RPM
#fan_speed_careful=100
battery_careful=80
battery_warning=90
battery_critical=95
# Sensors alias
#alias=core 0:CPU Core 0,core 1:CPU Core 1
#temp1_alias=Motherboard 0
#temp2_alias=Motherboard 1
#core 0_temperature_core_alias=CPU Core 0 temp
#core 0_fans_speed_alias=CPU Core 0 fan
#or
#core 0_alias=CPU Core 0
#core 1_alias=CPU Core 1
[processcount]
disable=False
@ -459,12 +325,6 @@ disable=False
# Should be one of the following:
# cpu_percent, memory_percent, io_counters, name, cpu_times, username
#sort_key=memory_percent
# List of stats to disable (not grabed and not display)
# Stats that can be disabled: cpu_percent,memory_info,memory_percent,username,cpu_times,num_threads,nice,status,io_counters,cmdline
# Stats that can not be disable: pid,name
#disable_stats=cpu_percent,memory_info,memory_percent,username,cpu_times,num_threads,nice,status,io_counters,cmdline
# Disable display of virtual memory
#disable_virtual_memory=True
# Define CPU/MEM (per process) thresholds in %
# Default values if not defined: 50/70/90
cpu_careful=50
@ -475,26 +335,15 @@ mem_warning=70
mem_critical=90
#
# Nice priorities range from -20 to 19.
# Configure nice levels using a comma-separated list.
# Configure nice levels using a comma separated list.
#
# Nice: Example 1, non-zero is warning (default behavior)
nice_warning=-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
#
# Nice: Example 2, low priority processes escalate from careful to critical
#nice_ok=O
#nice_careful=1,2,3,4,5,6,7,8,9
#nice_warning=10,11,12,13,14
#nice_critical=15,16,17,18,19
#
# Status: define threshold regarding the process status (first letter of process status)
# R: Running, S: Sleeping, Z: Zombie (complete list here https://psutil.readthedocs.io/en/latest/#process-status-constants)
status_ok=R,W,P,I
status_critical=Z,D
# Define the list of processes to export using:
# a comma-separated list of Glances filter
#export=.*firefox.*,pid:1234
# Define a list of process to focus on (comma-separated list of Glances filter)
#focus=.*firefox.*,.*python.*
[ports]
disable=False
@ -504,7 +353,7 @@ refresh=30
# Set the default timeout (in second) for a scan (can be overwritten in the scan list)
timeout=3
# If port_default_gateway is True, add the default gateway on top of the scan list
port_default_gateway=False
port_default_gateway=True
#
# Define the scan list (1 < x < 255)
# port_x_host (name or IP) is mandatory
@ -542,87 +391,54 @@ port_default_gateway=False
#web_4_url=https://blog.nicolargo.com/nonexist
#web_4_description=Intranet
[vms]
disable=True
# Define the maximum VMs size name (default is 20 chars)
max_name_size=20
# By default, Glances only display running VMs with states:
# 'Running', 'Paused', 'Starting' or 'Restarting'
# Set the following key to True to display all VMs regarding their states
all=False
[containers]
disable=False
# Only show specific containers (comma-separated list of container name or regular expression)
# Only show specific containers (comma separated list of container name or regular expression)
# Comment this line to display all containers (default configuration)
; show=telegraf
# Hide some containers (comma-separated list of container name or regular expression)
#show=telegraf
# Hide some containers (comma separated list of container name or regular expression)
# Comment this line to display all containers (default configuration)
; hide=telegraf
#hide=telegraf
# Define the maximum docker size name (default is 20 chars)
max_name_size=20
# List of stats to disable (not display)
# Following stats can be disabled: name,status,uptime,cpu,mem,diskio,networkio,ports,command
disable_stats=command
#cpu_careful=50
# Thresholds for CPU and MEM (in %)
; cpu_careful=50
; cpu_warning=70
; cpu_critical=90
; mem_careful=20
; mem_warning=50
; mem_critical=70
#cpu_warning=70
#cpu_critical=90
#mem_careful=20
#mem_warning=50
#mem_critical=70
#
# Per container thresholds
; containername_cpu_careful=10
; containername_cpu_warning=20
; containername_cpu_critical=30
#containername_cpu_careful=10
#containername_cpu_warning=20
#containername_cpu_critical=30
#
# By default, Glances only display running containers
# Set the following key to True to display all containers
all=False
# Define Podman sock
; podman_sock=unix:///run/user/1000/podman/podman.sock
#podman_sock=unix:///run/user/1000/podman/podman.sock
[amps]
# AMPs configuration are defined in the bottom of this file
disable=False
[alert]
disable=False
# Maximum number of events to display (default is 10 events)
;max_events=10
# Minimum duration for an event to be taken into account (default is 6 seconds)
;min_duration=6
# Minimum time between two events of the same type (default is 6 seconds)
# This is used to avoid too many alerts for the same event
# Events will be merged
;min_interval=6
##############################################################################
# Browser mode - Static servers definition
# Client/server
##############################################################################
[serverlist]
# Define columns (comma separated list of <plugin>:<field>:(<key>)) to grab/display
# Default is: system:hr_name,load:min5,cpu:total,mem:percent
# You can also add stats with key, like sensors:value:Ambient (key is case sensitive)
#columns=system:hr_name,load:min5,cpu:total,mem:percent,memswap:percent,sensors:value:Ambient,sensors:value:Composite
# Define the static servers list
# _protocol can be: rpc (default if not defined) or rest
# List is limited to 256 servers max (1 to 256)
#server_1_name=localhost
#server_1_alias=Local WebUI
#server_1_port=61266
#server_1_protocol=rest
#server_1_alias=My local PC
#server_1_port=61209
#server_2_name=localhost
#server_2_alias=My local PC
#server_2_port=61209
#server_2_protocol=rpc
#server_2_port=61235
#server_3_name=192.168.0.17
#server_3_alias=Another PC on my network
#server_3_port=61209
#server_1_protocol=rpc
#server_4_name=notagooddefinition
#server_4_name=pasbon
#server_4_port=61237
[passwords]
@ -641,20 +457,15 @@ disable=False
# Exports
##############################################################################
[export]
# Common section for all exporters
# Do not export following fields (comma separated list of regex)
#exclude_fields=.*_critical,.*_careful,.*_warning,.*\.key$
[graph]
# Configuration for the --export graph option
# Set the path where the graph (.svg files) will be created
# Can be overwrite by the --graph-path command line option
path=/tmp/glances
path=/tmp
# It is possible to generate the graphs automatically by setting the
# generate_every to a non zero value corresponding to the seconds between
# two generation. Set it to 0 to disable graph auto generation.
generate_every=0
generate_every=60
# See following configuration keys definitions in the Pygal lib documentation
# http://pygal.org/en/stable/documentation/index.html
width=800
@ -664,7 +475,7 @@ style=DarkStyle
[influxdb]
# !!!
# Will be DEPRECATED in future release.
# Please have a look on the new influxdb3 export module
# Please have a look on the new influxdb2 export module (compatible with InfluxDB 1.8.x and 2.x)
# !!!
# Configuration for the --export influxdb option
# https://influxdb.com/
@ -682,7 +493,7 @@ db=glances
#prefix=foo
# Following tags will be added for all measurements
# You can also use dynamic values.
# Note: hostname and name (for process) are always added as a tag
# Note: hostname is always added as a tag
#tags=foo:bar,spam:eggs,domain:`domainname`
[influxdb2]
@ -693,7 +504,7 @@ port=8086
protocol=http
org=nicolargo
bucket=glances
token=PUT_YOUR_INFLUXDB2_TOKEN_HERE
token=EjFUTWe8U-MIseEAkaVIgVnej_TrnbdvEcRkaB1imstW7gapSqy6_6-8XD-yd51V0zUUpDy-kAdVD1purDLuxA==
# Set the interval between two exports (in seconds)
# If the interval is set to 0, the Glances refresh time is used (default behavor)
#interval=0
@ -705,28 +516,7 @@ token=PUT_YOUR_INFLUXDB2_TOKEN_HERE
#prefix=foo
# Following tags will be added for all measurements
# You can also use dynamic values.
# Note: hostname and name (for process) are always added as a tag
#tags=foo:bar,spam:eggs,domain:`domainname`
[influxdb3]
# Configuration for the --export influxdb3 option
# https://influxdb.com/
host=http://localhost:8181
org=nicolargo
database=glances
token=PUT_YOUR_INFLUXDB3_TOKEN_HERE
# Set the interval between two exports (in seconds)
# If the interval is set to 0, the Glances refresh time is used (default behavor)
#interval=0
# Prefix will be added for all measurement name
# Ex: prefix=foo
# => foo.cpu
# => foo.mem
# You can also use dynamic values
#prefix=foo
# Following tags will be added for all measurements
# You can also use dynamic values.
# Note: hostname and name (for process) are always added as a tag
# Note: hostname is always added as a tag
#tags=foo:bar,spam:eggs,domain:`domainname`
[cassandra]
@ -786,15 +576,12 @@ queue=glances_queue
[mqtt]
# Configuration for the --export mqtt option
host=localhost
# Overwrite device name in the topic
#devicename=localhost
port=8883
tls=false
user=guest
password=guest
topic=glances
topic_structure=per-metric
callback_api_version=2
[couchdb]
# Configuration for the --export couchdb option
@ -802,8 +589,10 @@ callback_api_version=2
host=localhost
port=5984
db=glances
user=admin
password=admin
# user and password are optional (comment if not configured on the server side)
# If they are used, then the https protocol will be used
#user=root
#password=root
[mongodb]
# Configuration for the --export mongodb option
@ -880,26 +669,6 @@ prefix=glances
# By default, system_name = FQDN
#system_name=mycomputer
[timescaledb]
# Configuration for the --export timescaledb option
# https://www.timescale.com/
host=localhost
port=5432
db=glances
user=postgres
password=password
# Overwrite device name (default is the FQDN)
# Most of the time, you should not overwrite this value
#hostname=mycomputer
[nats]
# Configuration for the --export nats option
# https://nats.io/
# Host is a separated list of NATS nodes
host=nats://localhost:4222
# Prefix for the subjects (default is 'glances')
prefix=glances
##############################################################################
# AMPS
# * enable: Enable (true) or disable (false) the AMP
@ -935,13 +704,13 @@ refresh=3
countmax=20
[amp_conntrack]
# Use && separator for multiple commands
# Use comma separated for multiple commands (no space around the comma)
# If the regex key is not defined, the AMP will be executed every refresh second
# and the process count will not be displayed (countmin and countmax will be ignore)
enable=false
refresh=30
one_line=false
command=sysctl net.netfilter.nf_conntrack_count && sysctl net.netfilter.nf_conntrack_max
command=sysctl net.netfilter.nf_conntrack_count;sysctl net.netfilter.nf_conntrack_max
[amp_nginx]
# Use the NGinx AMP

View File

@ -9,12 +9,13 @@
# WARNING: the Alpine image version and Python version should be set.
# Alpine 3.18 tag is a link to the latest 3.18.x version.
# Be aware that if you change the Alpine version, you may have to change the Python version.
ARG IMAGE_VERSION=3.23
ARG PYTHON_VERSION=3.12
ARG IMAGE_VERSION=3.19
ARG PYTHON_VERSION=3.11
##############################################################################
# Base layer to be used for building dependencies and the release images
FROM alpine:${IMAGE_VERSION} AS base
FROM alpine:${IMAGE_VERSION} as base
# Upgrade the system
RUN apk update \
@ -34,7 +35,7 @@ RUN apk add --no-cache \
# BUILD Stages
##############################################################################
# BUILD: Base image shared by all build images
FROM base AS build
FROM base as build
ARG PYTHON_VERSION
RUN apk add --no-cache \
@ -54,48 +55,46 @@ RUN apk add --no-cache \
cargo \
pkgconfig \
libffi-dev \
openssl-dev \
cmake
# for cmake: Issue: https://github.com/nicolargo/glances/issues/2735
openssl-dev
RUN python${PYTHON_VERSION} -m venv venv-build
RUN /venv-build/bin/python${PYTHON_VERSION} -m pip install --upgrade pip
RUN python${PYTHON_VERSION} -m venv --without-pip venv
COPY pyproject.toml docker-requirements.txt all-requirements.txt ./
COPY requirements.txt docker-requirements.txt webui-requirements.txt optional-requirements.txt ./
##############################################################################
# BUILD: Install the minimal image deps
FROM build AS buildminimal
ARG PYTHON_VERSION
FROM build as buildMinimal
RUN /venv-build/bin/python${PYTHON_VERSION} -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
-r docker-requirements.txt
RUN python${PYTHON_VERSION} -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
# Note: requirements.txt is include by dep
-r docker-requirements.txt \
-r webui-requirements.txt
##############################################################################
# BUILD: Install all the deps
FROM build AS buildfull
ARG PYTHON_VERSION
FROM build as buildFull
# Required for optional dependency cassandra-driver
ARG CASS_DRIVER_NO_CYTHON=1
# See issue 2368
ARG CARGO_NET_GIT_FETCH_WITH_CLI=true
RUN /venv-build/bin/python${PYTHON_VERSION} -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
-r all-requirements.txt
RUN python${PYTHON_VERSION} -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
# Note: requirements.txt is include by dep
-r optional-requirements.txt
##############################################################################
# RELEASE Stages
##############################################################################
# Base image shared by all releases
FROM base AS release
ARG PYTHON_VERSION
FROM base as release
# Copy source code and config file
COPY ./docker-compose/glances.conf /etc/glances/glances.conf
COPY ./glances/. /app/glances/
COPY /glances /app/glances
# Copy binary and update PATH
COPY docker-bin.sh /usr/local/bin/glances
@ -105,45 +104,28 @@ ENV PATH="/venv/bin:$PATH"
# EXPOSE PORT (XMLRPC / WebUI)
EXPOSE 61209 61208
# Add glances user
# RUN addgroup -g 1000 glances && \
# adduser -D -u 1000 -G glances glances && \
# chown -R glances:glances /app
# Define default command.
WORKDIR /app
ENV PYTHON_VERSION=${PYTHON_VERSION}
CMD ["/bin/sh", "-c", "/venv/bin/python${PYTHON_VERSION} -m glances ${GLANCES_OPT}"]
CMD /venv/bin/python3 -m glances $GLANCES_OPT
################################################################################
# RELEASE: minimal
FROM release AS minimal
FROM release as minimal
COPY --from=buildminimal /venv /venv
# USER glances
COPY --from=buildMinimal /venv /venv
################################################################################
# RELEASE: full
FROM release AS full
FROM release as full
RUN apk add --no-cache libzmq
COPY --from=buildfull /venv /venv
# USER glances
COPY --from=buildFull /venv /venv
################################################################################
# RELEASE: dev - to be compatible with CI
FROM full AS dev
FROM full as dev
# Add the specific logger configuration file for Docker dev
# All logs will be forwarded to stdout
COPY ./docker-files/docker-logger.json /app
ENV LOG_CFG=/app/docker-logger.json
# USER glances
WORKDIR /app
ENV PYTHON_VERSION=${PYTHON_VERSION}
CMD ["/bin/sh", "-c", "/venv/bin/python${PYTHON_VERSION} -m glances ${GLANCES_OPT}"]
# Forward access and error logs to Docker's log collector
RUN ln -sf /dev/stdout /tmp/glances-root.log \
&& ln -sf /dev/stderr /var/log/error.log

View File

@ -1,24 +0,0 @@
{
"version": 1,
"disable_existing_loggers": "False",
"root": { "level": "INFO", "handlers": ["console"] },
"formatters": {
"standard": { "format": "%(asctime)s -- %(levelname)s -- %(message)s" },
"short": { "format": "%(levelname)s -- %(message)s" },
"long": {
"format": "%(asctime)s -- %(levelname)s -- %(message)s (%(funcName)s in %(filename)s)"
},
"free": { "format": "%(message)s" }
},
"handlers": {
"console": { "class": "logging.StreamHandler", "formatter": "standard" }
},
"loggers": {
"debug": { "handlers": ["console"], "level": "DEBUG" },
"verbose": { "handlers": ["console"], "level": "INFO" },
"standard": { "handlers": ["console"], "level": "INFO" },
"requests": { "handlers": ["console"], "level": "ERROR" },
"elasticsearch": { "handlers": ["console"], "level": "ERROR" },
"elasticsearch.trace": { "handlers": ["console"], "level": "ERROR" }
}
}

View File

@ -5,15 +5,15 @@
#
# WARNING: the versions should be set.
# Ex: Python 3.12 for Ubuntu 24.04
# Ex: Python 3.10 for Ubuntu 22.04
# Note: ENV is for future running containers. ARG for building your Docker image.
ARG IMAGE_VERSION=24.04
ARG PYTHON_VERSION=3.12
ARG IMAGE_VERSION=23.04
ARG PYTHON_VERSION=3.11
##############################################################################
# Base layer to be used for building dependencies and the release images
FROM ubuntu:${IMAGE_VERSION} AS base
FROM ubuntu:${IMAGE_VERSION} as base
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
@ -32,7 +32,7 @@ RUN apt-get update \
# BUILD Stages
##############################################################################
# BUILD: Base image shared by all build images
FROM base AS build
FROM base as build
ARG PYTHON_VERSION
ARG DEBIAN_FRONTEND=noninteractive
@ -53,36 +53,36 @@ RUN apt-get install -y --no-install-recommends \
RUN apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN python3 -m venv --without-pip venv
RUN python${PYTHON_VERSION} -m venv --without-pip venv
COPY pyproject.toml docker-requirements.txt all-requirements.txt ./
COPY requirements.txt docker-requirements.txt webui-requirements.txt optional-requirements.txt ./
##############################################################################
# BUILD: Install the minimal image deps
FROM build AS buildminimal
ARG PYTHON_VERSION
FROM build as buildMinimal
RUN python3 -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
-r docker-requirements.txt
RUN python${PYTHON_VERSION} -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
# Note: requirements.txt is include by dep
-r docker-requirements.txt \
-r webui-requirements.txt
##############################################################################
# BUILD: Install all the deps
FROM build AS buildfull
ARG PYTHON_VERSION
FROM build as buildFull
RUN python3 -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
-r all-requirements.txt
RUN python${PYTHON_VERSION} -m pip install --target="/venv/lib/python${PYTHON_VERSION}/site-packages" \
# Note: requirements.txt is include by dep
-r optional-requirements.txt
##############################################################################
# RELEASE Stages
##############################################################################
# Base image shared by all releases
FROM base AS release
ARG PYTHON_VERSION
FROM base as release
# Copy Glances source code and config file
COPY ./docker-compose/glances.conf /etc/glances/glances.conf
COPY ./glances/. /app/glances/
COPY /glances /app/glances
# Copy binary and update PATH
COPY docker-bin.sh /usr/local/bin/glances
@ -92,54 +92,31 @@ ENV PATH="/venv/bin:$PATH"
# EXPOSE PORT (XMLRPC / WebUI)
EXPOSE 61209 61208
# Add glances user
# NOTE: If used, the Glances Docker plugin do not work...
# UID and GUID 1000 are already configured for the ubuntu user
# Create anew one with UID and GUID 1001
# RUN groupadd -g 1001 glances && \
# useradd -u 1001 -g glances glances && \
# chown -R glances:glances /app
# Define default command.
WORKDIR /app
ENV PYTHON_VERSION=${PYTHON_VERSION}
CMD ["/bin/sh", "-c", "/venv/bin/python${PYTHON_VERSION} -m glances ${GLANCES_OPT}"]
CMD /venv/bin/python3 -m glances $GLANCES_OPT
################################################################################
# RELEASE: minimal
FROM release AS minimal
ARG PYTHON_VERSION
FROM release as minimal
COPY --from=buildMinimal /venv /venv
# USER glances
################################################################################
# RELEASE: full
FROM release AS full
ARG PYTHON_VERSION
FROM release as full
RUN apt-get update \
&& apt-get install -y --no-install-recommends libzmq5 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
COPY --from=buildfull /venv /venv
# USER glances
COPY --from=buildFull /venv /venv
################################################################################
# RELEASE: dev - to be compatible with CI
FROM full AS dev
ARG PYTHON_VERSION
FROM full as dev
# Add the specific logger configuration file for Docker dev
# All logs will be forwarded to stdout
COPY ./docker-files/docker-logger.json /app
ENV LOG_CFG=/app/docker-logger.json
# USER glances
WORKDIR /app
ENV PYTHON_VERSION=${PYTHON_VERSION}
CMD ["/bin/sh", "-c", "/venv/bin/python${PYTHON_VERSION} -m glances ${GLANCES_OPT}"]
# Forward access and error logs to Docker's log collector
RUN ln -sf /dev/stdout /tmp/glances-root.log \
&& ln -sf /dev/stderr /var/log/error.log

View File

@ -1,83 +1,10 @@
# This file was autogenerated by uv via the following command:
# uv export --no-emit-workspace --no-hashes --no-group dev --extra containers --extra web --output-file docker-requirements.txt
annotated-doc==0.0.4
# via fastapi
annotated-types==0.7.0
# via pydantic
anyio==4.12.0
# via starlette
certifi==2025.11.12
# via requests
charset-normalizer==3.4.4
# via requests
click==8.1.8
# via uvicorn
colorama==0.4.6 ; sys_platform == 'win32'
# via click
defusedxml==0.7.1
# via glances
docker==7.1.0
# via glances
exceptiongroup==1.2.2 ; python_full_version < '3.11'
# via anyio
fastapi==0.128.0
# via glances
h11==0.16.0
# via uvicorn
idna==3.11
# via
# anyio
# requests
jinja2==3.1.6
# via glances
markupsafe==3.0.3
# via jinja2
packaging==25.0
# via glances
podman==5.6.0
# via glances
psutil==7.2.1
# via glances
pydantic==2.12.5
# via fastapi
pydantic-core==2.41.5
# via pydantic
python-dateutil==2.9.0.post0
# via glances
pywin32==311 ; sys_platform == 'win32'
# via docker
requests==2.32.5
# via
# docker
# glances
# podman
shtab==1.8.0 ; sys_platform != 'win32'
# via glances
six==1.17.0
# via
# glances
# python-dateutil
starlette==0.50.0
# via fastapi
tomli==2.0.2 ; python_full_version < '3.11'
# via podman
typing-extensions==4.15.0
# via
# anyio
# fastapi
# pydantic
# pydantic-core
# starlette
# typing-inspection
# uvicorn
typing-inspection==0.4.2
# via pydantic
urllib3==2.6.2
# via
# docker
# podman
# requests
uvicorn==0.40.0
# via glances
windows-curses==2.4.1 ; sys_platform == 'win32'
# via glances
# install with base requirements file
-r requirements.txt
docker>=6.1.1; python_version >= "3.7"
podman; python_version >= "3.6"
packaging; python_version >= "3.7"
python-dateutil
six
urllib3
requests

View File

@ -3,7 +3,7 @@
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = ../.venv/bin/sphinx-build
SPHINXBUILD = ../venv/bin/sphinx-build
PAPER =
BUILDDIR = _build

View File

@ -1,8 +0,0 @@
<svg width="466" height="513" viewBox="0 0 466 513" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M255.158 74.6719C210.447 74.6719 169.577 90.8033 137.94 117.597L101.314 74.351C142.801 39.2144 196.539 18 255.158 18C313.777 18 367.514 39.2144 409.002 74.351L372.375 117.597C340.739 90.8033 299.869 74.6719 255.158 74.6719Z" fill="#57CB6A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M69.724 269.786C78.8585 239.798 93.6848 213.11 114.202 189.72C109.215 190.339 104.374 191.744 99.6848 193.934C99.4507 193.778 99.2179 193.622 98.9852 193.466C98.7524 193.31 98.5197 193.153 98.2856 192.997C115.671 167.026 137.51 145.644 163.821 128.851C148.064 102.5 139.949 73.9389 139.475 43.1663C175.368 48.9377 205.645 65.0133 230.302 91.3932C274.053 98.9935 313.69 115.849 349.218 141.961C357.984 148.228 364.694 156.188 369.349 165.841C371.421 173.282 373.29 180.773 374.963 188.315C378.06 195.163 382.598 200.939 388.553 205.639C396.216 212.36 404.635 217.979 413.827 222.496C425.428 226.146 437.299 228.487 449.419 229.519C450.036 238.808 447.687 247.236 442.388 254.803C422.562 269.701 400.243 275.475 375.436 272.127C354.959 268.606 334.526 265.016 314.115 261.358C298.373 261.798 289.313 269.913 286.953 285.706C285.479 298.85 288.291 311.024 295.383 322.227C298.898 327.698 302.636 333.004 306.612 338.146C317.576 350.517 329.288 362.067 341.732 372.795C335.351 374.599 328.801 375.692 322.073 376.072C329.039 380.163 337.274 385.383 345.878 390.837C360.519 400.118 376.227 410.074 388.553 416.286C337.769 445.709 282.887 477.418 169.436 434.6C120.749 416.226 83.0894 382.995 69.724 348.786C58.1736 319.223 60.5895 299.774 69.724 269.786ZM293.571 177.683C316.621 190.99 343.292 187.948 343.292 187.948C343.292 187.948 333.852 161.145 310.802 147.837C287.753 134.529 259.821 139.756 259.821 139.756C259.821 139.756 270.521 164.375 293.571 177.683Z" fill="#494949"/>
<path opacity="0.976" fill-rule="evenodd" clip-rule="evenodd" d="M296.872 356.751C291.496 356.475 286.193 356.007 280.958 355.347C300.379 370.178 315.357 388.594 325.89 410.591C321.407 409.082 316.726 407.989 311.849 407.314C315.577 416.3 319.321 425.351 323.082 434.468C261.493 452.42 204.235 443.369 151.309 407.314C150.685 402.008 150.685 396.702 151.309 391.396C152.52 380.056 154.079 368.82 155.99 357.688C146.778 368.801 139.913 381.286 135.396 395.141C133.367 393.112 131.34 391.084 129.311 389.055C131.985 368.86 138.225 349.821 148.033 331.938C145.902 332.304 143.718 332.304 141.48 331.938C142.614 332.774 142.614 333.554 141.48 334.279C137.084 337.409 132.716 340.53 128.375 343.643C140.699 316.793 158.484 294.164 181.732 275.758C188.213 271.424 195.078 267.834 202.326 264.99C204.288 277.522 207.565 289.694 212.155 301.507C212.731 303.02 213.667 304.268 214.964 305.252C224.041 288.216 235.118 272.61 248.195 258.435C247.883 258.123 247.57 257.811 247.259 257.499C236.51 263.412 226.992 270.903 218.708 279.971C214.966 269.684 212.781 259.072 212.155 248.135C211.792 247.267 211.168 246.642 210.283 246.263C195.64 251.401 181.911 258.268 169.095 266.862C174.297 249.902 182.254 234.297 192.965 220.045C191.167 218.977 189.295 218.82 187.349 219.577C181.431 221.394 175.503 223.112 169.563 224.727C169.563 224.415 169.563 224.102 169.563 223.791C186.845 203.591 208.688 191.107 235.089 186.337C228.102 183.226 220.925 180.573 213.559 178.378C232.751 178.16 251.16 181.905 268.789 189.614C293.076 201.759 316.79 214.868 339.932 228.94C364.586 243.299 391.108 249.229 419.5 246.731C424.816 244.085 429.496 244.865 433.541 249.072C417.681 261.779 399.582 266.617 379.248 263.585C362.612 260.632 346.075 257.198 329.635 253.285C289.901 244.644 271.023 260.717 273.001 301.507C274.036 311.264 276.532 320.627 280.49 329.597C285.501 339.011 290.961 348.063 296.872 356.751Z" fill="#656565"/>
<path opacity="0.976" fill-rule="evenodd" clip-rule="evenodd" d="M196.71 87.0847C188.449 82.7977 180.024 78.7402 171.436 74.9123C171.124 75.2244 170.811 75.5365 170.5 75.8486C174.6 82.3323 178.344 89.0428 181.733 95.98C178.363 95.004 175.243 93.2874 172.372 90.8301C172.06 91.1422 171.747 91.4544 171.436 91.7665C172.803 97.9843 174.052 104.227 175.18 110.493C164.477 95.9365 157.3 79.7065 153.65 61.8035C170.36 66.374 184.714 74.8011 196.71 87.0847Z" fill="#656565"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M137.94 117.597C98.5802 150.932 73.6684 200.623 73.6684 256.161C73.6684 356.395 154.924 437.65 255.158 437.65C292.62 437.65 327.376 426.327 356.267 406.904V308.015H412.939V435.092L402.098 443.601C361.629 475.365 310.568 494.322 255.158 494.322C123.625 494.322 16.9966 387.694 16.9966 256.161C16.9966 183.263 49.7834 117.993 101.314 74.3508L137.94 117.597Z" fill="#57CB6A"/>
<path d="M298.832 173.943V157.86C298.411 158.251 297.894 158.641 297.28 159.032C296.682 159.407 296.052 159.765 295.389 160.106C294.726 160.432 294.071 160.733 293.425 161.01C292.778 161.27 292.213 161.474 291.728 161.62V156.81C292.277 156.582 292.908 156.24 293.619 155.785C294.346 155.329 295.049 154.849 295.728 154.344C296.407 153.823 297.021 153.326 297.571 152.854C298.12 152.382 298.492 152.016 298.686 151.756H303.899V173.943H298.832Z" fill="#57CB6A"/>
</svg>

Before

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -1,8 +0,0 @@
<svg width="466" height="513" viewBox="0 0 466 513" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M254.919 74.6719C210.209 74.6719 169.338 90.8033 137.702 117.597L101.076 74.351C142.563 39.2144 196.3 18 254.919 18C313.539 18 367.276 39.2144 408.763 74.351L372.137 117.597C340.501 90.8033 299.63 74.6719 254.919 74.6719Z" fill="#57CB6A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M69.4858 269.786C78.6202 239.798 93.4465 213.11 113.963 189.72C108.977 190.339 104.136 191.744 99.4465 193.934C99.2124 193.778 98.9797 193.622 98.7469 193.466C98.5141 193.31 98.2814 193.153 98.0473 192.997C115.432 167.026 137.272 145.644 163.583 128.851C147.826 102.5 139.711 73.9389 139.237 43.1663C175.13 48.9377 205.406 65.0133 230.063 91.3932C273.815 98.9935 313.452 115.849 348.979 141.961C357.746 148.228 364.456 156.188 369.111 165.841C371.183 173.282 373.052 180.773 374.725 188.315C377.822 195.163 382.36 200.939 388.315 205.639C395.978 212.36 404.397 217.979 413.588 222.496C425.19 226.146 437.061 228.487 449.181 229.519C449.798 238.808 447.449 247.236 442.15 254.803C422.323 269.701 400.004 275.475 375.197 272.127C354.721 268.606 334.288 265.016 313.877 261.358C298.135 261.798 289.075 269.913 286.714 285.706C285.24 298.85 288.053 311.024 295.145 322.227C298.66 327.698 302.398 333.004 306.373 338.146C317.338 350.517 329.049 362.067 341.494 372.795C335.112 374.599 328.562 375.692 321.835 376.072C328.8 380.163 337.036 385.383 345.639 390.837C360.281 400.118 375.988 410.074 388.315 416.286C337.531 445.709 282.649 477.418 169.198 434.6C120.511 416.226 82.8511 382.995 69.4857 348.786C57.9354 319.223 60.3512 299.774 69.4858 269.786ZM293.333 177.683C316.383 190.99 343.053 187.948 343.053 187.948C343.053 187.948 333.614 161.145 310.564 147.837C287.514 134.529 259.583 139.756 259.583 139.756C259.583 139.756 270.283 164.375 293.333 177.683Z" fill="#EBEBEB"/>
<path opacity="0.976" fill-rule="evenodd" clip-rule="evenodd" d="M296.633 356.751C291.258 356.475 285.954 356.007 280.72 355.347C300.141 370.178 315.118 388.594 325.652 410.591C321.168 409.082 316.488 407.989 311.611 407.314C315.338 416.3 319.083 425.351 322.844 434.468C261.255 452.42 203.997 443.369 151.071 407.314C150.447 402.008 150.447 396.702 151.071 391.396C152.281 380.056 153.841 368.82 155.751 357.688C146.539 368.801 139.675 381.286 135.157 395.141C133.129 393.112 131.101 391.084 129.073 389.055C131.746 368.86 137.986 349.821 147.795 331.938C145.664 332.304 143.48 332.304 141.242 331.938C142.376 332.774 142.376 333.554 141.242 334.279C136.846 337.409 132.477 340.53 128.137 343.643C140.46 316.793 158.246 294.164 181.494 275.758C187.975 271.424 194.84 267.834 202.088 264.99C204.05 277.522 207.326 289.694 211.917 301.507C212.493 303.02 213.429 304.268 214.725 305.252C223.803 288.216 234.879 272.61 247.956 258.435C247.645 258.123 247.332 257.811 247.02 257.499C236.271 263.412 226.754 270.903 218.47 279.971C214.728 269.684 212.543 259.072 211.917 248.135C211.554 247.267 210.929 246.642 210.045 246.263C195.401 251.401 181.673 258.268 168.857 266.862C174.059 249.902 182.015 234.297 192.727 220.045C190.929 218.977 189.057 218.82 187.111 219.577C181.193 221.394 175.264 223.112 169.325 224.727C169.325 224.415 169.325 224.102 169.325 223.791C186.607 203.591 208.45 191.107 234.851 186.337C227.864 183.226 220.687 180.573 213.321 178.378C232.513 178.16 250.922 181.905 268.551 189.614C292.837 201.759 316.551 214.868 339.693 228.94C364.347 243.299 390.87 249.229 419.261 246.731C424.577 244.085 429.258 244.865 433.303 249.072C417.442 261.779 399.344 266.617 379.009 263.585C362.374 260.632 345.837 257.198 329.396 253.285C289.663 244.644 270.785 260.717 272.763 301.507C273.797 311.264 276.294 320.627 280.252 329.597C285.263 339.011 290.723 348.063 296.633 356.751Z" fill="#C1C1C1"/>
<path opacity="0.976" fill-rule="evenodd" clip-rule="evenodd" d="M196.472 87.0847C188.211 82.7977 179.786 78.7402 171.197 74.9123C170.886 75.2244 170.573 75.5365 170.261 75.8486C174.361 82.3323 178.106 89.0428 181.494 95.98C178.124 95.004 175.004 93.2874 172.133 90.8301C171.822 91.1422 171.509 91.4544 171.197 91.7665C172.565 97.9843 173.814 104.227 174.942 110.493C164.238 95.9365 157.061 79.7065 153.412 61.8035C170.122 66.374 184.476 74.8011 196.472 87.0847Z" fill="#C1C1C1"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M137.702 117.597C98.3419 150.932 73.4302 200.623 73.4302 256.161C73.4302 356.395 154.686 437.65 254.92 437.65C292.382 437.65 327.138 426.327 356.029 406.904V308.015H412.701V435.092L401.86 443.601C361.391 475.365 310.33 494.322 254.92 494.322C123.387 494.322 16.7583 387.694 16.7583 256.161C16.7583 183.263 49.5451 117.993 101.076 74.3508L137.702 117.597Z" fill="#57CB6A"/>
<path d="M298.593 173.943V157.86C298.173 158.251 297.656 158.641 297.041 159.032C296.443 159.407 295.813 159.765 295.15 160.106C294.488 160.432 293.833 160.733 293.186 161.01C292.54 161.27 291.974 161.474 291.489 161.62V156.81C292.039 156.582 292.669 156.24 293.38 155.785C294.108 155.329 294.811 154.849 295.49 154.344C296.169 153.823 296.783 153.326 297.332 152.854C297.882 152.382 298.254 152.016 298.448 151.756H303.66V173.943H298.593Z" fill="#57CB6A"/>
</svg>

Before

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -1,15 +0,0 @@
<svg width="680" height="728" viewBox="0 0 680 728" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M119.501 582.227C117.131 587.757 115.551 592.496 113.181 598.026C104.492 593.286 95.012 590.916 85.5325 590.126C62.6238 588.546 46.0347 598.816 39.715 620.935C34.9753 637.524 34.9753 654.113 42.0849 669.912C48.4045 684.131 58.674 692.031 74.4731 693.611C83.9526 694.401 92.6421 693.611 102.122 692.031C102.122 684.131 102.122 675.442 102.122 667.542C102.122 659.643 102.122 651.743 102.122 643.843C108.441 643.843 113.971 643.843 119.501 643.843C119.501 664.382 119.501 684.131 119.501 705.46C113.971 706.25 108.441 707.83 102.912 708.62C94.2221 709.41 85.5325 710.99 76.843 710.99C42.8748 710.99 20.756 688.871 16.8062 656.483C15.2263 643.054 15.2263 628.834 19.9661 615.405C28.6556 589.336 50.7744 573.537 78.4229 572.747C89.4823 572.747 99.7518 574.327 109.231 577.487C113.181 579.067 116.341 580.647 119.501 582.227Z" fill="#494949"/>
<path d="M576.096 663.595C553.187 663.595 531.068 663.595 508.159 663.595C509.739 668.335 509.739 673.074 511.319 677.814C515.269 688.084 523.169 692.823 533.438 694.403C543.707 695.983 553.977 695.193 564.246 691.243C565.036 691.243 566.616 690.453 567.406 690.453C568.196 695.193 568.986 699.933 569.776 705.463C562.666 707.043 556.347 708.622 550.027 709.412C537.388 710.992 524.748 710.202 512.899 703.883C502.63 698.353 495.52 690.453 492.36 679.394C487.62 662.805 487.62 646.216 495.52 630.417C504.999 611.458 525.538 602.768 546.077 607.508C561.086 611.458 568.986 620.937 572.936 635.946C576.096 644.636 576.886 653.325 576.096 663.595ZM508.949 648.586C525.538 648.586 541.338 648.586 557.927 648.586C557.927 632.787 550.027 622.517 536.598 621.727C521.589 620.937 510.529 632.787 508.949 648.586Z" fill="#494949"/>
<path d="M268.802 706.25C249.843 708.62 231.674 712.569 213.505 707.04C200.076 703.09 193.756 692.82 193.756 678.601C193.756 665.172 200.866 654.903 213.505 650.953C224.565 647.003 236.414 647.003 248.263 649.373C249.843 649.373 250.633 650.163 252.213 650.163C253.793 634.364 248.263 624.094 234.044 622.514C224.565 621.724 215.875 623.304 206.396 625.674C205.606 620.934 204.816 616.195 204.026 611.455C209.556 608.295 215.875 608.295 222.195 607.505C232.464 606.715 241.944 606.715 251.423 610.665C259.323 613.825 264.853 620.144 267.222 628.044C268.012 631.204 269.592 635.154 269.592 638.313C268.802 660.432 268.802 683.341 268.802 706.25ZM251.423 663.592C241.154 661.222 230.094 660.432 220.615 664.382C214.295 666.752 211.135 672.282 211.135 678.601C211.135 686.501 215.085 690.451 222.195 692.82C231.674 695.98 241.944 694.4 251.423 693.61C251.423 683.341 251.423 673.861 251.423 663.592Z" fill="#494949"/>
<path d="M298.826 612.249C304.356 611.459 309.886 609.879 316.205 609.089C326.475 608.299 337.534 607.509 347.804 608.299C364.393 609.879 374.662 620.938 377.032 638.317C377.822 643.847 377.822 648.587 377.822 654.116C377.822 670.706 377.822 686.505 377.822 703.094C377.822 704.674 377.822 706.254 377.822 707.834C371.502 707.834 365.973 707.834 359.653 707.834C359.653 706.254 359.653 704.674 359.653 703.094C359.653 688.085 359.653 673.075 359.653 658.066C359.653 650.957 358.863 643.847 357.283 636.737C355.703 628.838 350.173 624.888 343.064 624.098C334.374 622.518 325.685 624.098 316.995 625.678C316.995 653.326 316.995 680.975 316.995 708.623C310.676 708.623 305.146 708.623 299.616 708.623C298.826 676.235 298.826 644.637 298.826 612.249Z" fill="#494949"/>
<path d="M657.454 610.664C656.664 616.193 655.084 620.933 654.294 624.883C647.184 623.303 640.865 621.723 633.755 621.723C629.805 621.723 625.066 622.513 621.116 623.303C613.216 626.463 610.846 635.152 617.166 641.472C619.536 643.842 623.486 646.212 627.436 647.792C633.755 650.952 640.075 652.531 646.394 655.691C653.504 658.851 659.824 663.591 662.194 672.28C666.143 688.869 660.614 703.879 639.285 707.828C625.066 710.988 610.846 710.198 597.417 704.669C596.627 704.669 595.837 703.879 595.047 703.879L594.257 703.089C595.047 698.349 596.627 693.609 597.417 688.869C604.527 690.449 610.846 692.819 617.956 693.609C624.276 694.399 631.385 693.609 637.705 692.029C646.395 689.659 648.764 680.18 642.445 673.86C640.075 671.49 636.915 669.121 633.755 668.331C627.436 665.171 621.906 662.801 615.586 660.431C608.477 657.271 602.157 653.321 598.997 645.422C592.677 629.623 601.367 613.034 618.746 608.294C628.225 605.134 645.605 605.924 657.454 610.664Z" fill="#494949"/>
<path d="M474.178 690.45C474.968 695.19 475.758 699.929 476.548 704.669C474.968 705.459 474.178 706.249 473.388 706.249C459.958 710.199 446.529 710.989 433.1 707.039C418.881 702.299 408.611 692.82 404.661 678.6C399.922 662.801 399.922 647.002 407.821 631.203C414.931 616.194 427.57 607.504 444.159 605.924C454.429 605.134 464.698 605.924 474.968 610.664C473.388 615.404 472.598 620.144 471.018 624.883C465.488 624.093 460.748 622.513 456.009 621.723C446.529 620.934 436.26 621.723 429.15 629.623C425.99 632.783 423.62 637.523 422.04 641.472C418.881 653.322 418.881 665.171 422.83 676.231C426.78 686.5 433.89 691.24 444.159 692.82C452.849 694.4 462.328 693.61 471.018 690.45C471.808 691.24 472.598 691.24 474.178 690.45Z" fill="#494949"/>
<path d="M181.11 694.401C180.32 699.141 179.53 703.88 178.74 708.62C162.151 711.78 147.932 701.511 147.932 684.132C147.932 646.214 147.932 608.296 147.932 571.168C147.932 568.798 147.932 566.428 147.932 564.058C154.252 563.268 159.781 561.688 166.101 560.898C166.101 563.268 166.101 564.848 166.101 566.428C166.101 602.766 166.101 639.104 166.101 675.442C166.101 677.812 166.101 680.182 166.101 681.762C166.891 688.871 169.261 692.031 177.161 693.611C177.95 693.611 178.74 694.401 181.11 694.401Z" fill="#494949"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M363.176 77.9551C315.086 77.9551 271.127 95.3057 237.099 124.124L197.705 77.6099C242.328 39.8177 300.127 17 363.176 17C426.226 17 484.025 39.8177 528.647 77.6099L489.253 124.124C455.226 95.3057 411.266 77.9551 363.176 77.9551Z" fill="#57CB6A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M163.728 287.816C173.553 255.562 189.499 226.856 211.567 201.698C206.204 202.364 200.997 203.875 195.953 206.231C195.701 206.063 195.451 205.895 195.2 205.727C194.95 205.559 194.7 205.391 194.448 205.224C213.147 177.289 236.637 154.292 264.937 136.229C247.989 107.887 239.26 77.1667 238.751 44.0684C277.357 50.276 309.921 67.5666 336.442 95.9402C383.5 104.115 426.133 122.245 464.345 150.33C473.774 157.07 480.992 165.632 485.998 176.014C488.227 184.018 490.237 192.075 492.037 200.188C495.367 207.553 500.249 213.765 506.654 218.821C514.896 226.05 523.951 232.093 533.837 236.951C546.316 240.877 559.084 243.395 572.12 244.505C572.784 254.497 570.257 263.562 564.558 271.7C543.233 287.724 519.227 293.935 492.545 290.334C470.521 286.547 448.544 282.685 426.589 278.751C409.658 279.224 399.913 287.953 397.374 304.939C395.789 319.077 398.814 332.171 406.442 344.22C410.222 350.104 414.243 355.812 418.519 361.343C430.312 374.648 442.909 387.071 456.294 398.61C449.43 400.551 442.385 401.726 435.149 402.135C442.641 406.535 451.499 412.15 460.753 418.015C476.501 427.998 493.395 438.707 506.654 445.388C452.031 477.035 393.002 511.14 270.976 465.087C218.61 445.323 178.103 409.581 163.728 372.787C151.304 340.989 153.903 320.07 163.728 287.816ZM404.493 188.751C429.285 203.065 457.971 199.792 457.971 199.792C457.971 199.792 447.819 170.964 423.027 156.65C398.235 142.336 368.192 147.958 368.192 147.958C368.192 147.958 379.701 174.438 404.493 188.751Z" fill="#494949"/>
<path opacity="0.976" fill-rule="evenodd" clip-rule="evenodd" d="M408.043 381.354C402.262 381.057 396.557 380.553 390.927 379.843C411.816 395.796 427.925 415.603 439.255 439.263C434.432 437.639 429.398 436.464 424.152 435.738C428.162 445.403 432.189 455.138 436.234 464.944C369.99 484.253 308.405 474.518 251.479 435.738C250.808 430.031 250.808 424.324 251.479 418.617C252.781 406.42 254.458 394.335 256.513 382.361C246.605 394.314 239.222 407.743 234.363 422.645C232.181 420.463 230 418.282 227.818 416.099C230.694 394.378 237.406 373.9 247.955 354.665C245.664 355.059 243.315 355.059 240.907 354.665C242.127 355.565 242.127 356.404 240.907 357.183C236.179 360.55 231.48 363.907 226.812 367.254C240.067 338.375 259.197 314.037 284.201 294.239C291.172 289.578 298.556 285.717 306.352 282.657C308.462 296.136 311.986 309.229 316.924 321.934C317.543 323.562 318.55 324.904 319.944 325.963C329.708 307.638 341.622 290.853 355.687 275.607C355.352 275.272 355.016 274.935 354.68 274.6C343.119 280.96 332.882 289.017 323.972 298.771C319.947 287.706 317.597 276.292 316.924 264.529C316.533 263.594 315.862 262.923 314.91 262.515C299.16 268.042 284.394 275.427 270.609 284.671C276.204 266.429 284.762 249.645 296.284 234.316C294.349 233.167 292.336 232.998 290.242 233.812C283.877 235.767 277.501 237.614 271.113 239.351C271.113 239.016 271.113 238.679 271.113 238.344C289.701 216.618 313.194 203.19 341.591 198.06C334.076 194.714 326.357 191.86 318.434 189.499C339.076 189.265 358.877 193.293 377.838 201.585C403.96 214.648 429.466 228.747 454.358 243.883C480.875 259.327 509.402 265.705 539.939 263.018C545.657 260.172 550.691 261.011 555.042 265.536C537.983 279.204 518.516 284.407 496.645 281.146C478.752 277.97 460.965 274.277 443.282 270.068C400.546 260.773 380.241 278.062 382.368 321.934C383.481 332.428 386.166 342.5 390.423 352.148C395.813 362.273 401.686 372.009 408.043 381.354Z" fill="#666666"/>
<path opacity="0.976" fill-rule="evenodd" clip-rule="evenodd" d="M300.311 91.306C291.426 86.695 282.364 82.3308 273.127 78.2136C272.791 78.5492 272.455 78.885 272.12 79.2207C276.53 86.1944 280.557 93.4121 284.202 100.874C280.577 99.8239 277.221 97.9775 274.133 95.3345C273.798 95.6701 273.462 96.0059 273.127 96.3416C274.598 103.029 275.941 109.744 277.154 116.484C265.642 100.827 257.922 83.3702 253.997 64.114C271.97 69.03 287.409 78.094 300.311 91.306Z" fill="#666666"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M237.1 124.124C194.765 159.979 167.97 213.426 167.97 273.161C167.97 380.971 255.367 468.367 363.176 468.367C403.47 468.367 440.853 456.188 471.927 435.297V328.934H532.882V465.615L521.222 474.767C477.695 508.932 422.774 529.322 363.176 529.322C221.702 529.322 107.015 414.635 107.015 273.161C107.015 194.753 142.28 124.551 197.705 77.6099L237.1 124.124Z" fill="#57CB6A"/>
<path d="M410.151 184.729V167.431C409.699 167.851 409.143 168.271 408.482 168.691C407.839 169.094 407.161 169.479 406.448 169.847C405.735 170.197 405.031 170.521 404.336 170.819C403.64 171.099 403.032 171.318 402.51 171.475V166.301C403.101 166.056 403.779 165.688 404.544 165.198C405.327 164.708 406.083 164.191 406.813 163.649C407.543 163.088 408.204 162.554 408.795 162.047C409.386 161.539 409.786 161.145 409.995 160.865H415.601V184.729H410.151Z" fill="#57CB6A"/>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1,15 +0,0 @@
<svg width="680" height="728" viewBox="0 0 680 728" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M120.262 582.227C117.893 587.757 116.313 592.496 113.943 598.026C105.253 593.286 95.7737 590.916 86.2942 590.126C63.3855 588.546 46.7964 598.816 40.4767 620.935C35.737 637.524 35.737 654.113 42.8466 669.912C49.1663 684.131 59.4357 692.031 75.2348 693.611C84.7143 694.401 93.4039 693.611 102.883 692.031C102.883 684.131 102.883 675.442 102.883 667.542C102.883 659.643 102.883 651.743 102.883 643.843C109.203 643.843 114.733 643.843 120.262 643.843C120.262 664.382 120.262 684.131 120.262 705.46C114.733 706.25 109.203 707.83 103.673 708.62C94.9838 709.41 86.2943 710.99 77.6047 710.99C43.6366 710.99 21.5177 688.871 17.568 656.483C15.988 643.054 15.988 628.834 20.7278 615.405C29.4173 589.336 51.5361 573.537 79.1846 572.747C90.244 572.747 100.513 574.327 109.993 577.487C113.943 579.067 117.103 580.647 120.262 582.227Z" fill="#C8C8C8"/>
<path d="M576.857 663.595C553.949 663.595 531.83 663.595 508.921 663.595C510.501 668.335 510.501 673.075 512.081 677.814C516.031 688.084 523.93 692.824 534.2 694.403C544.469 695.983 554.739 695.193 565.008 691.244C565.798 691.244 567.378 690.454 568.168 690.454C568.958 695.193 569.748 699.933 570.538 705.463C563.428 707.043 557.108 708.623 550.789 709.413C538.149 710.993 525.51 710.203 513.661 703.883C503.391 698.353 496.282 690.454 493.122 679.394C488.382 662.805 488.382 646.216 496.282 630.417C505.761 611.458 526.3 602.768 546.839 607.508C561.848 611.458 569.748 620.937 573.698 635.947C576.857 644.636 577.647 653.326 576.857 663.595ZM509.711 648.586C526.3 648.586 542.099 648.586 558.688 648.586C558.688 632.787 550.789 622.517 537.36 621.727C522.35 620.937 511.291 632.787 509.711 648.586Z" fill="#C8C8C8"/>
<path d="M269.564 706.25C250.605 708.62 232.436 712.569 214.267 707.04C200.838 703.09 194.518 692.82 194.518 678.601C194.518 665.172 201.628 654.903 214.267 650.953C225.326 647.003 237.176 647.003 249.025 649.373C250.605 649.373 251.395 650.163 252.975 650.163C254.555 634.364 249.025 624.094 234.806 622.514C225.326 621.724 216.637 623.304 207.157 625.674C206.367 620.934 205.577 616.195 204.788 611.455C210.317 608.295 216.637 608.295 222.957 607.505C233.226 606.715 242.705 606.715 252.185 610.665C260.085 613.825 265.614 620.144 267.984 628.044C268.774 631.204 270.354 635.154 270.354 638.313C269.564 660.432 269.564 683.341 269.564 706.25ZM252.185 663.592C241.916 661.222 230.856 660.432 221.377 664.382C215.057 666.752 211.897 672.282 211.897 678.601C211.897 686.501 215.847 690.451 222.957 692.82C232.436 695.98 242.705 694.4 252.185 693.61C252.185 683.341 252.185 673.861 252.185 663.592Z" fill="#C8C8C8"/>
<path d="M299.588 612.249C305.118 611.459 310.648 609.879 316.967 609.089C327.237 608.299 338.296 607.509 348.566 608.299C365.155 609.879 375.424 620.938 377.794 638.317C378.584 643.847 378.584 648.587 378.584 654.116C378.584 670.706 378.584 686.505 378.584 703.094C378.584 704.674 378.584 706.254 378.584 707.834C372.264 707.834 366.735 707.834 360.415 707.834C360.415 706.254 360.415 704.674 360.415 703.094C360.415 688.085 360.415 673.075 360.415 658.066C360.415 650.957 359.625 643.847 358.045 636.737C356.465 628.838 350.936 624.888 343.826 624.098C335.136 622.518 326.447 624.098 317.757 625.678C317.757 653.326 317.757 680.975 317.757 708.623C311.438 708.623 305.908 708.623 300.378 708.623C299.588 676.235 299.588 644.637 299.588 612.249Z" fill="#C8C8C8"/>
<path d="M658.216 610.664C657.426 616.193 655.846 620.933 655.056 624.883C647.947 623.303 641.627 621.723 634.517 621.723C630.568 621.723 625.828 622.513 621.878 623.303C613.979 626.463 611.609 635.152 617.928 641.472C620.298 643.842 624.248 646.212 628.198 647.792C634.517 650.952 640.837 652.531 647.157 655.691C654.266 658.851 660.586 663.591 662.956 672.28C666.906 688.869 661.376 703.879 640.047 707.828C625.828 710.988 611.609 710.198 598.179 704.669C597.389 704.669 596.599 703.879 595.809 703.879L595.02 703.089C595.809 698.349 597.389 693.609 598.179 688.869C605.289 690.449 611.609 692.819 618.718 693.609C625.038 694.399 632.148 693.609 638.467 692.029C647.157 689.659 649.527 680.18 643.207 673.86C640.837 671.49 637.677 669.121 634.517 668.331C628.198 665.171 622.668 662.801 616.348 660.431C609.239 657.271 602.919 653.321 599.759 645.422C593.44 629.623 602.129 613.034 619.508 608.294C628.988 605.134 646.367 605.924 658.216 610.664Z" fill="#C8C8C8"/>
<path d="M474.939 690.45C475.729 695.19 476.519 699.929 477.309 704.669C475.729 705.459 474.939 706.249 474.149 706.249C460.72 710.199 447.291 710.989 433.862 707.039C419.642 702.299 409.373 692.82 405.423 678.6C400.683 662.801 400.683 647.002 408.583 631.203C415.693 616.194 428.332 607.504 444.921 605.924C455.19 605.134 465.46 605.924 475.729 610.664C474.149 615.404 473.359 620.144 471.78 624.883C466.25 624.093 461.51 622.513 456.77 621.723C447.291 620.934 437.021 621.723 429.912 629.623C426.752 632.783 424.382 637.523 422.802 641.472C419.642 653.322 419.642 665.171 423.592 676.231C427.542 686.5 434.652 691.24 444.921 692.82C453.611 694.4 463.09 693.61 471.78 690.45C472.57 691.24 473.36 691.24 474.939 690.45Z" fill="#C8C8C8"/>
<path d="M181.872 694.401C181.082 699.141 180.292 703.88 179.502 708.62C162.913 711.78 148.694 701.511 148.694 684.132C148.694 646.214 148.694 608.296 148.694 571.168C148.694 568.798 148.694 566.428 148.694 564.058C155.014 563.268 160.543 561.688 166.863 560.898C166.863 563.268 166.863 564.848 166.863 566.428C166.863 602.766 166.863 639.104 166.863 675.442C166.863 677.812 166.863 680.182 166.863 681.762C167.653 688.871 170.023 692.031 177.922 693.611C178.712 693.611 179.502 694.401 181.872 694.401Z" fill="#C8C8C8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M363.938 77.9551C315.848 77.9551 271.889 95.3057 237.861 124.124L198.467 77.6099C243.09 39.8177 300.888 17 363.938 17C426.988 17 484.786 39.8177 529.409 77.6099L490.015 124.124C455.987 95.3057 412.028 77.9551 363.938 77.9551Z" fill="#57CB6A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M164.49 287.816C174.314 255.562 190.261 226.856 212.329 201.698C206.966 202.364 201.759 203.875 196.715 206.231C196.463 206.063 196.213 205.895 195.962 205.727C195.712 205.559 195.461 205.391 195.21 205.224C213.909 177.289 237.398 154.292 265.699 136.229C248.751 107.887 240.022 77.1667 239.512 44.0684C278.118 50.276 310.683 67.5666 337.204 95.9402C384.261 104.115 426.895 122.245 465.107 150.33C474.536 157.07 481.753 165.632 486.76 176.014C488.989 184.018 490.999 192.075 492.799 200.188C496.129 207.553 501.01 213.765 507.416 218.821C515.658 226.05 524.713 232.093 534.599 236.951C547.077 240.877 559.845 243.395 572.882 244.505C573.545 254.497 571.019 263.562 565.319 271.7C543.994 287.724 519.988 293.935 493.306 290.334C471.283 286.547 449.305 282.685 427.351 278.751C410.419 279.224 400.675 287.953 398.136 304.939C396.551 319.077 399.575 332.171 407.203 344.22C410.984 350.104 415.005 355.812 419.281 361.343C431.074 374.648 443.671 387.071 457.055 398.61C450.192 400.551 443.147 401.726 435.911 402.135C443.403 406.535 452.261 412.15 461.515 418.015C477.263 427.998 494.157 438.707 507.416 445.388C452.793 477.035 393.764 511.14 271.737 465.087C219.371 445.323 178.865 409.581 164.49 372.787C152.066 340.989 154.665 320.07 164.49 287.816ZM405.255 188.751C430.047 203.065 458.733 199.792 458.733 199.792C458.733 199.792 448.58 170.964 423.788 156.65C398.997 142.336 368.954 147.958 368.954 147.958C368.954 147.958 380.463 174.438 405.255 188.751Z" fill="#EBEBEB"/>
<path opacity="0.976" fill-rule="evenodd" clip-rule="evenodd" d="M408.805 381.354C403.023 381.057 397.319 380.553 391.688 379.843C412.577 395.796 428.687 415.603 440.017 439.263C435.194 437.639 430.16 436.464 424.914 435.738C428.923 445.403 432.951 455.138 436.996 464.944C370.752 484.253 309.167 474.518 252.241 435.738C251.569 430.031 251.569 424.324 252.241 418.617C253.543 406.42 255.22 394.335 257.275 382.361C247.367 394.314 239.984 407.743 235.125 422.645C232.943 420.463 230.762 418.282 228.58 416.099C231.456 394.378 238.167 373.9 248.717 354.665C246.425 355.059 244.076 355.059 241.669 354.665C242.888 355.565 242.888 356.404 241.669 357.183C236.941 360.55 232.242 363.907 227.573 367.254C240.828 338.375 259.958 314.037 284.963 294.239C291.934 289.578 299.318 285.717 307.114 282.657C309.224 296.136 312.748 309.229 317.685 321.934C318.305 323.562 319.312 324.904 320.706 325.963C330.469 307.638 342.383 290.853 356.449 275.607C356.114 275.272 355.777 274.935 355.442 274.6C343.88 280.96 333.644 289.017 324.733 298.771C320.709 287.706 318.359 276.292 317.685 264.529C317.295 263.594 316.623 262.923 315.672 262.515C299.922 268.042 285.155 275.427 271.371 284.671C276.966 266.429 285.524 249.645 297.045 234.316C295.111 233.167 293.097 232.998 291.004 233.812C284.639 235.767 278.263 237.614 271.874 239.351C271.874 239.016 271.874 238.679 271.874 238.344C290.463 216.618 313.956 203.19 342.353 198.06C334.838 194.714 327.119 191.86 319.196 189.499C339.838 189.265 359.639 193.293 378.599 201.585C404.722 214.648 430.228 228.747 455.119 243.883C481.636 259.327 510.163 265.705 540.701 263.018C546.419 260.172 551.453 261.011 555.803 265.536C538.744 279.204 519.278 284.407 497.407 281.146C479.514 277.97 461.727 274.277 444.044 270.068C401.308 260.773 381.003 278.062 383.13 321.934C384.243 332.428 386.928 342.5 391.185 352.148C396.574 362.273 402.447 372.009 408.805 381.354Z" fill="#C1C1C1"/>
<path opacity="0.976" fill-rule="evenodd" clip-rule="evenodd" d="M301.073 91.306C292.188 86.695 283.126 82.3308 273.888 78.2136C273.553 78.5492 273.217 78.885 272.881 79.2207C277.291 86.1944 281.319 93.4121 284.964 100.874C281.339 99.8239 277.983 97.9775 274.895 95.3345C274.56 95.6701 274.224 96.0059 273.888 96.3416C275.359 103.029 276.702 109.744 277.916 116.484C266.403 100.827 258.684 83.3702 254.758 64.114C272.731 69.03 288.17 78.094 301.073 91.306Z" fill="#C1C1C1"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M237.861 124.124C195.527 159.979 168.732 213.426 168.732 273.161C168.732 380.971 256.129 468.367 363.938 468.367C404.232 468.367 441.614 456.188 472.689 435.297V328.934H533.644V465.615L521.984 474.767C478.457 508.932 423.536 529.322 363.938 529.322C222.464 529.322 107.777 414.635 107.777 273.161C107.777 194.753 143.042 124.551 198.467 77.6099L237.861 124.124Z" fill="#57CB6A"/>
<path d="M410.913 184.729V167.431C410.461 167.851 409.904 168.271 409.244 168.691C408.601 169.094 407.922 169.479 407.21 169.847C406.497 170.197 405.793 170.521 405.097 170.819C404.402 171.099 403.794 171.318 403.272 171.475V166.301C403.863 166.056 404.541 165.688 405.306 165.198C406.088 164.708 406.845 164.191 407.575 163.649C408.305 163.088 408.966 162.554 409.557 162.047C410.148 161.539 410.548 161.145 410.756 160.865H416.363V184.729H410.913Z" fill="#57CB6A"/>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 76 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 203 KiB

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 288 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 425 KiB

After

Width:  |  Height:  |  Size: 349 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

BIN
docs/_static/wifi.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@ -3,7 +3,7 @@
Actions
=======
Glances can trigger actions on events for warning and critical thresholds.
Glances can trigger actions on events.
By ``action``, we mean all shell command line. For example, if you want
to execute the ``foo.py`` script if the last 5 minutes load are critical
@ -18,13 +18,6 @@ then add the ``_action`` line to the Glances configuration file:
All the stats are available in the command line through the use of the
`Mustache`_ syntax. `Chevron`_ is required to render the mustache's template syntax.
Additionaly to the stats of the current plugin, the following variables are
also available:
- ``{{time}}``: current time in ISO format
- ``{{critical}}``: critical threshold value
- ``{{warning}}``: warning threshold value
- ``{{careful}}``: careful threshold value
Another example would be to create a log file
containing used vs total disk space if a space trigger warning is
reached:
@ -33,7 +26,7 @@ reached:
[fs]
warning=70
warning_action=echo "{{time}} {{mnt_point}} {{used}}/{{size}}" > /tmp/fs.alert
warning_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert
A last example would be to create a log file containing the total user disk
space usage for a device and notify by email each time a space trigger
@ -43,11 +36,13 @@ critical is reached:
[fs]
critical=90
critical_action_repeat=echo "{{time}} {{device_name}} {{percent}}" > /tmp/fs.alert && python /etc/glances/actions.d/fs-critical.py
critical_action_repeat=echo {{device_name}} {{percent}} > /tmp/fs.alert && python /etc/glances/actions.d/fs-critical.py
.. note::
Use && as separator for multiple commands
Within ``/etc/glances/actions.d/fs-critical.py``:
.. code-block:: python
@ -68,7 +63,7 @@ Within ``/etc/glances/actions.d/fs-critical.py``:
.. note::
You can use all the stats for the current plugin. See
https://github.com/nicolargo/glances/wiki/The-Glances-RESTFUL-JSON-API
https://github.com/nicolargo/glances/wiki/The-Glances-RESTFULL-JSON-API
for the stats list.
It is also possible to repeat action until the end of the alert.

View File

@ -61,11 +61,9 @@ For example:
enable=false
refresh=30
one_line=false
command=sysctl net.netfilter.nf_conntrack_count && sysctl net.netfilter.nf_conntrack_max
command=sysctl net.netfilter.nf_conntrack_count;sysctl net.netfilter.nf_conntrack_max
Note: for multiple command, please use the '&&'' separator.
For security reason, pipe is not directly allowed in a AMP command but you create a shell
For security reason, pipe is not directly allowed in a AMP command but you create a sheel
script with your command:
.. code-block:: ini

View File

@ -3,7 +3,7 @@
CLOUD
=====
This plugin displays information about the cloud provider if your host is running on OpenStack.
This plugin diplays information about the cloud provider if your host is running on OpenStack.
The plugin use the standard OpenStack `metadata`_ service to retrieve the information.

View File

@ -14,8 +14,6 @@ You can install this dependency using:
.. image:: ../_static/containers.png
Note: Memory usage is compute as following "display memory usage = memory usage - inactive_file"
It is possible to define limits and actions from the configuration file
under the ``[containers]`` section:
@ -23,17 +21,14 @@ under the ``[containers]`` section:
[containers]
disable=False
# Only show specific containers (comma-separated list of container name or regular expression)
# Only show specific containers (comma separated list of container name or regular expression)
show=thiscontainer,andthisone,andthoseones.*
# Hide some containers (comma-separated list of container name or regular expression)
# Hide some containers (comma separated list of container name or regular expression)
hide=donotshowthisone,andthose.*
# Show only specific containers (comma-separated list of container name or regular expression)
# Show only specific containers (comma separated list of container name or regular expression)
#show=showthisone,andthose.*
# Define the maximum containers size name (default is 20 chars)
max_name_size=20
# List of stats to disable (not display)
# Following stats can be disabled: name,status,uptime,cpu,mem,diskio,networkio,ports,command
disable_stats=command
# Global containers' thresholds for CPU and MEM (in %)
cpu_careful=50
cpu_warning=70

View File

@ -15,6 +15,17 @@ displayed.
.. image:: ../_static/cpu-wide.png
A character is also displayed just after the CPU header and shows the
trend value:
======== ==============================================================
Trend Status
======== ==============================================================
``-`` CPU value is equal to the mean of the six latests refreshes
``\`` CPU value is lower than the mean of the six latests refreshes
``/`` CPU value is higher than the mean of the six latests refreshes
======== ==============================================================
CPU stats description:
- **user**: percent time spent in user space. User CPU time is the time
@ -35,8 +46,6 @@ CPU stats description:
operations to complete.
- **steal** *(Linux)*: percentage of time a virtual CPU waits for a real
CPU while the hypervisor is servicing another virtual processor.
- **guest** *(Linux)*: percentage of time a virtual CPU spends
servicing another virtual CPU under the control of the Linux kernel.
- **ctx_sw**: number of context switches (voluntary + involuntary) per
second. A context switch is a procedure that a computer's CPU (central
processing unit) follows to change from one task (or process) to
@ -53,19 +62,6 @@ To switch to per-CPU stats, just hit the ``1`` key:
.. image:: ../_static/per-cpu.png
In this case, Glances will show on line per logical CPU on the system.
If you have multiple core, it is possible to define the maximum number
of CPU to display. The top 'max_cpu_display' will be display and an
extra line with the mean of all others CPU will be added.
.. code-block:: ini
[percpu]
# Define the maximum number of CPU display at a time
# If the number of CPU is higher than:
# - display the top 'max_cpu_display' (sorted by CPU consumption)
# - a last line will be added with the sum of all other CPUs
max_cpu_display=4
Logical cores means the number of physical cores multiplied by the number
of threads that can run on each core (this is known as Hyper Threading).

View File

@ -5,16 +5,21 @@ Disk I/O
.. image:: ../_static/diskio.png
Glances displays the disk I/O throughput, count and mean latency:
Glances displays the disk I/O throughput. The unit is adapted
dynamically.
You can display:
- bytes per second (default behavior / Bytes/s, KBytes/s, MBytes/s, etc)
- requests per second (using --diskio-iops option or *B* hotkey)
- mean latency (using --diskio-latency option or *L* hotkey)
It's also possible to define:
There is no alert on this information.
It's possible to define:
- a list of disk to show (white list)
- a list of disks to hide
- aliases for disk name (use \ to espace special characters)
- aliases for disk name
under the ``[diskio]`` section in the configuration file.
@ -37,38 +42,4 @@ Filtering is based on regular expression. Please be sure that your regular
expression works as expected. You can use an online tool like `regex101`_ in
order to test your regular expression.
It is also possible to define thesholds for latency and bytes read and write per second:
.. code-block:: ini
[diskio]
# Alias for sda1 and sdb1
#alias=sda1:SystemDisk,sdb1:DataDisk
# Default latency thresholds (in ms) (rx = read / tx = write)
rx_latency_careful=10
rx_latency_warning=20
rx_latency_critical=50
tx_latency_careful=10
tx_latency_warning=20
tx_latency_critical=50
# Set thresholds (in bytes per second) for a given disk name (rx = read / tx = write)
dm-0_rx_careful=4000000000
dm-0_rx_warning=5000000000
dm-0_rx_critical=6000000000
dm-0_rx_log=True
dm-0_tx_careful=700000000
dm-0_tx_warning=900000000
dm-0_tx_critical=1000000000
dm-0_tx_log=True
You also can automatically hide disk with no read or write using the
``hide_zero`` configuration key. The optional ``hide_threshold_bytes`` option
can also be used to set a threshold higher than zero.
.. code-block:: ini
[diskio]
hide_zero=True
hide_threshold_bytes=0
.. _regex101: https://regex101.com/

View File

@ -18,20 +18,3 @@ Each event message displays the following information:
3. alert name
4. {min,avg,max} values or number of running processes for monitored
processes list alerts
The configuration should be done in the ``[alert]`` section of the
Glances configuration file:
.. code-block:: ini
[alert]
disable=False
# Maximum number of events to display (default is 10 events)
max_events=10
# Minimum duration for an event to be taken into account (default is 6 seconds)
min_duration=6
# Minimum time between two events of the same type (default is 6 seconds)
# This is used to avoid too many alerts for the same event
# Events will be merged
min_interval=6

View File

@ -35,9 +35,6 @@ the following definition should do the job:
In client/server mode, the list is defined on the ``server`` side.
.. warning::
Symbolic links are not followed.
.. warning::
Do **NOT** define folders containing lot of files and subfolders or use an
huge refresh time...

View File

@ -35,11 +35,6 @@ system:
[fs]
allow=shm
With the above configuration key, it is also possible to monitor NFS
mount points (allow=nfs). Be aware that this can slow down the
performance of the plugin if the NFS server is not reachable. In this
case, the plugin will wait for a 2 seconds timeout.
Also, you can hide mount points using regular expressions.
To hide all mount points starting with /boot and /snap:

View File

@ -3,16 +3,16 @@
GPU
===
For the moment, only following GPU are supported:
- NVidia (thanks to the `nvidia-ml-py`_ library)
- AMD (only on Linux Operating system with kernel 5.14 or higher)
.. note::
You need to install the `py3nvml`_ library on your system.
Or `nvidia-ml-py3`_ for Glances 3.1.3 or lower.
The GPU stats are shown as a percentage of value and for the configured
refresh time. It displays:
- total GPU usage
- memory consumption
- temperature
- temperature (Glances 3.1.4 or higher)
.. image:: ../_static/gpu.png
@ -28,19 +28,15 @@ You can change the threshold limits in the configuration file:
.. code-block:: ini
[gpu]
# Default processor values if not defined: 50/70/90
proc_careful=50
proc_warning=70
proc_critical=90
# Default memory values if not defined: 50/70/90
mem_careful=50
mem_warning=70
mem_critical=90
# Temperature
temperature_careful=60
temperature_warning=70
temperature_critical=80
[gpu]
# Default processor values if not defined: 50/70/90
proc_careful=50
proc_warning=70
proc_critical=90
# Default memory values if not defined: 50/70/90
mem_careful=50
mem_warning=70
mem_critical=90
Legend:
@ -53,4 +49,5 @@ GPU (PROC/MEM) Status
``>90%`` ``CRITICAL``
============== ============
.. _nvidia-ml-py: https://pypi.org/project/nvidia-ml-py/
.. _py3nvml: https://pypi.org/project/py3nvml/
.. _nvidia-ml-py3: https://pypi.org/project/nvidia-ml-py3/

View File

@ -11,55 +11,36 @@ Additionally, on GNU/Linux, it also shows the kernel version.
In client mode, the server connection status is also displayed.
The system information message can be configured in the configuration file
(for the moment, it only work for the Curses interface):
It is possible to disable or define time interval to be used for refreshing the
public IP address (default is 300 seconds) from the configuration
file under the ``[ip]`` section:
.. code-block:: ini
[system]
# System information to display (a string where {key} will be replaced by the value) in the Curses interface
# Available dynamics information are: hostname, os_name, os_version, os_arch, linux_distro, platform
system_info_msg= | My {os_name} system |
The header IP message can be configured from the ip ``[ip]`` section, it allows to display private and
public IP information.
In the default configuration file, public IP address information is disable. Set public_disabled, to False
in order to enable the feature.
Example:
.. code-block:: ini
[ip]
# Disable display of private IP address
disable=False
# Configure the online service where public IP address information will be downloaded
# - public_disabled: Disable public IP address information (set to True for offline platform)
# - public_refresh_interval: Refresh interval between to calls to the online service
# - public_api: URL of the API (the API should return an JSON object)
# - public_username: Login for the online service (if needed)
# - public_password: Password for the online service (if needed)
# - public_field: Field name of the public IP address in onlibe service JSON message
# - public_template: Template to build the public message
#
# Example for IPLeak service:
# public_api=https://ipv4.ipleak.net/json/
# public_field=ip
# public_template={ip} {continent_name}/{country_name}/{city_name}
#
public_disabled=False
public_refresh_interval=300
public_api=https://ipv4.ipleak.net/json/
#public_username=<myname>
#public_password=<mysecret>
public_field=ip
public_template={continent_name}/{country_name}/{city_name}
public_ip_disabled=True
**NOTE:** Setting low values for `public_refresh_interval` will result in frequent
HTTP requests to the onlive service defined in public_api. Recommended range: 120-600 seconds.
Glances uses online services in order to get the IP addresses and the additional information.
Your IP address could be blocked if too many requests are done.
HTTP requests to the IP detection servers. Recommended range: 120-600 seconds.
Glances uses online services in order to get the IP addresses. Your IP address could be
blocked if too many requests are done.
If the Censys options are configured, the public IP address is also analysed (with the same interval)
and additional information is displayed.
.. code-block:: ini
[ip]
public_refresh_interval=300
public_ip_disabled=True
censys_url=https://search.censys.io/api
# Get your own credential here: https://search.censys.io/account/api
censys_username=CENSYS_API_ID
censys_password=CENSYS_API_SECRET
# List of fields to be displayed in user interface (comma separated)
censys_fields=location:continent,location:country,autonomous_system:name
**Note:** Access to the Censys Search API need an account (https://censys.io/login).
Example:

View File

@ -41,7 +41,6 @@ Legend:
hddtemp
ps
containers
vms
amps
events
actions

View File

@ -31,17 +31,6 @@ percentage.
.. image:: ../_static/loadpercent.png
A character is also displayed just after the LOAD header and shows the
trend value (for the 1 minute load stat):
======== ==============================================================
Trend Status
======== ==============================================================
``-`` Mean 15 lasts values equal mean 15 previous values
```` Mean 15 lasts values is lower mean 15 previous values
```` Mean 15 lasts values is higher mean 15 previous values
======== ==============================================================
Legend:
============= ============

View File

@ -27,7 +27,7 @@ Stats description:
is in RAM.
- **inactive**: (UNIX): memory that is marked as not used.
- **buffers**: (Linux, BSD): cache for things like file system metadata.
- **cached**: (Linux, BSD): cache for various things (including ZFS cache).
- **cached**: (Linux, BSD): cache for various things.
Additional stats available in through the API:
@ -41,19 +41,15 @@ Additional stats available in through the API:
- **shared**: (BSD): memory that may be simultaneously accessed by multiple
processes.
It is possible to display the available memory instead of the used memory
by setting the ``available`` option to ``True`` in the configuration file
under the ``[mem]`` section.
A character is also displayed just after the MEM header and shows the
trend value:
======== ==============================================================
Trend Status
======== ==============================================================
``-`` Mean 15 lasts values equal mean 15 previous values
```` Mean 15 lasts values is lower mean 15 previous values
```` Mean 15 lasts values is higher mean 15 previous values
``-`` MEM value is equal to the mean of the six latests refreshes
``\`` MEM value is lower than the mean of the six latests refreshes
``/`` MEM value is higher than the mean of the six latests refreshes
======== ==============================================================
Alerts are only set for used memory and used swap.

View File

@ -17,10 +17,8 @@ In this case thresholds values are define in bps.
Additionally, you can define:
- a list of network interfaces to hide
- automatically hide interfaces not up
- automatically hide interfaces without IP address
- per-interface limit values
- aliases for interface name (use \ to espace special characters)
- aliases for interface name
The configuration should be done in the ``[network]`` section of the
Glances configuration file.
@ -43,14 +41,8 @@ virtual docker interface (docker0, docker1, ...):
hide=docker.*,lo
# Define the list of network interfaces to show (comma-separated regexp)
#show=eth0,eth1
# Automatically hide interface not up (default is False)
hide_no_up=True
# Automatically hide interface with no IP address (default is False)
hide_no_ip=True
# Set hide_zero to True to automatically hide interface with no traffic
hide_zero=False
# WLAN 0 alias
alias=wlan0:Wireless IF
wlan0_alias=Wireless IF
# It is possible to overwrite the bitrate thresholds per interface
# WLAN 0 Default limits (in bits per second aka bps) for interface bitrate
wlan0_rx_careful=4000000
@ -66,14 +58,4 @@ Filtering is based on regular expression. Please be sure that your regular
expression works as expected. You can use an online tool like `regex101`_ in
order to test your regular expression.
You also can automatically hide interface with no traffic using the
``hide_zero`` configuration key. The optional ``hide_threshold_bytes`` option
can also be used to set a threshold higher than zero.
.. code-block:: ini
[network]
hide_zero=True
hide_threshold_bytes=0
.. _regex101: https://regex101.com/
.. _regex101: https://regex101.com/

View File

@ -102,8 +102,7 @@ Columns display
``CPU%`` % of CPU used by the process
If Irix/Solaris mode is off ('0' key), the value
is divided by logical core number (the column
name became CPUi)
is divided by logical core number
``MEM%`` % of MEM used by the process (RES divided by
the total RAM you have)
``VIRT`` Virtual Memory Size
@ -124,7 +123,6 @@ Columns display
The non-swapped physical memory a process is
using (what's currently in the physical memory).
``PID`` Process ID (column is replaced by NPROCS in accumulated mode)
``NPROCS`` Number of process + childs (only in accumulated mode)
``USER`` User ID
``THR`` Threads number of the process
``TIME+`` Cumulative CPU time used by the process
@ -149,24 +147,12 @@ Columns display
pressing on the ``'/'`` key
========================= ==============================================
Disable display of virtual memory
---------------------------------
It's possible to disable the display of the VIRT column (virtual memory) by adding the
``disable_virtual_memory=True`` option in the ``[processlist]`` section of the configuration
file (glances.conf):
.. code-block:: ini
[processlist]
disable_virtual_memory=True
Process filtering
-----------------
It's possible to filter the processes list using the ``ENTER`` key.
Glances filter syntax is the following (examples):
Filter syntax is the following (examples):
- ``python``: Filter processes name or command line starting with
*python* (regexp)
@ -175,25 +161,6 @@ Glances filter syntax is the following (examples):
- ``username:nicolargo``: Processes of nicolargo user (key:regexp)
- ``cmdline:\/usr\/bin.*``: Processes starting by */usr/bin*
Process focus
-------------
It's also possible to select a processes list to focus on.
A list of Glances filters (see upper) can be define from the command line:
.. code-block:: bash
glances --process-focus .*python.*,.*firefox.*
or the glances.conf file:
.. code-block:: ini
[processlist]
focus=.*python.*,.*firefox.*
Extended info
-------------
@ -223,7 +190,7 @@ In curses/standalone mode, you can select a process using ``UP`` and ``DOWN`` an
.. note::
Limit for CPU and MEM percent values can be overwritten in the
configuration file under the ``[processlist]`` section. It is also
possible to define limit for Nice values (comma-separated list).
possible to define limit for Nice values (comma separated list).
For example: nice_warning=-20,-19,-18
Accumulated per program — key 'j'
@ -232,67 +199,4 @@ Accumulated per program — key 'j'
When activated ('j' hotkey or --programs option in the command line), processes are merged
to display which programs are active. The columns show the accumulated cpu consumption, the
accumulated virtual and resident memory consumption, the accumulated transferred data I/O.
The PID columns is replaced by a NPROCS column which is the number of processes.
Export process
--------------
Glances version 4 introduces a new feature to export specifics processes. In order to use this
feature, you need to use the export option in the processlist section of the Glances configuration
file or the --export-process-filter option in the command line.
The export option is a list of Glances filters.
Example number one, export all processes named 'python' (or with a command line containing 'python'):
.. code-block:: ini
[processlist]
export=.*python.*
Note: or the --export-process-filter ".*python.*" option in the command line.
Example number two, export all processes with the name 'python' or 'bash':
.. code-block:: ini
[processlist]
export=.*python.*,.*bash.*
Note: or the --export-process-filter ".*python.*,.*bash.*" option in the command line.
Example number three, export all processes belong to 'nicolargo' user:
.. code-block:: ini
[processlist]
export=username:nicolargo
Note: or the --export-process-filter "username:nicolargo" option in the command line.
The output of the export use the PID as the key (for example if you want to export firefox process
to a CSV file):
Configuration file (glances.conf):
.. code-block:: ini
[processlist]
export=.*firefox.*
Note: or the --export-process-filter ".*firefox.*" option in the command line.
Command line example:
.. code-block:: bash
glances -C ./conf/glances.conf --export csv --export-csv-file /tmp/glances.csv --disable-plugin all --enable-plugin processlist --quiet
the result will be:
.. code-block:: csv
timestamp,845992.memory_percent,845992.status,845992.num_threads,845992.cpu_timesuser,845992.cpu_timessystem,845992.cpu_timeschildren_user,845992.cpu_timeschildren_system,845992.cpu_timesiowait,845992.memory_inforss,845992.memory_infovms,845992.memory_infoshared,845992.memory_infotext,845992.memory_infolib,845992.memory_infodata,845992.memory_infodirty,845992.name,845992.io_counters,845992.nice,845992.cpu_percent,845992.pid,845992.gidsreal,845992.gidseffective,845992.gidssaved,845992.key,845992.time_since_update,845992.cmdline,845992.username,total,running,sleeping,thread,pid_max
2024-04-03 18:39:55,3.692938041968513,S,138,1702.88,567.89,1752.79,244.18,0.0,288919552,12871561216,95182848,856064,0,984535040,0,firefox,1863281664,0,0.5,845992,1000,1000,1000,pid,2.2084147930145264,/snap/firefox/3836/usr/lib/firefox/firefox,nicolargo,403,1,333,1511,0
2024-04-03 18:39:57,3.692938041968513,S,138,1702.88,567.89,1752.79,244.18,0.0,288919552,12871561216,95182848,856064,0,984535040,0,firefox,1863281664,0,0.5,845992,1000,1000,1000,pid,2.2084147930145264,/snap/firefox/3836/usr/lib/firefox/firefox,nicolargo,403,1,333,1511,0
The PID columns is replaced by a NPROCS column which is the number of processes.

View File

@ -4,7 +4,7 @@ Quick Look
==========
The ``quicklook`` plugin is only displayed on wide screen and proposes a
bar view for cpu, memory, swap and load (this list is configurable).
bar view for CPU and memory (virtual and swap).
In the terminal interface, click on ``3`` to enable/disable it.
@ -27,14 +27,10 @@ client/server mode (see issue ).
Limit values can be overwritten in the configuration file under
the ``[quicklook]`` section.
You can also configure the stats list and the bat character used in the
user interface.
You can also configure the percentage char used in the terminal user interface.
.. code-block:: ini
[quicklook]
# Stats list (default is cpu,mem,load)
# Available stats are: cpu,mem,load,swap
list=cpu,mem,load
# Graphical percentage char used in the terminal user interface (default is |)
bar_char=|
percentage_char=@

View File

@ -8,14 +8,7 @@ RAID
*Dependency: this plugin uses the optional pymdstat Python lib*
This plugin is disable by default, please use the --enable-plugin raid option
to enable it or enable it in the glances.conf file:
.. code-block:: ini
[raid]
# Documentation: https://glances.readthedocs.io/en/latest/aoa/raid.html
# This plugin is disabled by default
disable=False
to enable it.
In the terminal interface, click on ``R`` to enable/disable it.

View File

@ -13,45 +13,30 @@ Glances can display the sensors information using ``psutil``,
- hard disk temperature
- battery capacity
Limit values and sensors alias names can be defined in the configuration
file under the ``[sensors]`` section.
Limit can be defined for a specific sensor, a type of sensor or defineby the system
thresholds (default behavor).
.. code-block:: ini
[sensors]
# Sensors core thresholds (in Celsius...)
# By default values are grabbed from the system
# Overwrite thresholds for a specific sensor
temperature_core_Ambient_careful=45
temperature_core_Ambient_warning=65
temperature_core_Ambient_critical=80
temperature_core_Ambient_log=False
# Overwrite thresholds for a specific type of sensor
#temperature_core_careful=45
#temperature_core_warning=65
#temperature_core_critical=80
#alias=temp1:Motherboard 0,core 0:CPU Core 0
There is no alert on this information.
.. note 1::
Limit values and sensors alias names can be defined in the
configuration file under the ``[sensors]`` section.
.. note 2::
The support for multiple batteries is only available if
you have the batinfo Python lib installed on your system
because for the moment PSUtil only support one battery.
.. note 2::
.. note 3::
If a sensors has temperature and fan speed with the same name unit,
it is possible to alias it using:
alias=unitname_temperature_core_alias:Alias for temp,unitname_fan_speed_alias:Alias for fan speed
unitname_temperature_core_alias=Alias for temp
unitname_fan_speed_alias=Alias for fan speed
.. note 3::
.. note 4::
If a sensors has multiple identical features names (see #2280), then
Glances will add a suffix to the feature name.
For example, if you have one sensor with two Composite features, the
second one will be named Composite_1.
.. note 4::
.. note 5::
The plugin could crash on some operating system (FreeBSD) with the
TCP or UDP blackhole option > 0 (see issue #2106). In this case, you
should disable the sensors (--disable-plugin sensors or from the

View File

@ -22,33 +22,3 @@ How to read the information:
.. warning::
This plugin needs administrator rights. Please run Glances as root/admin.
Also, you can hide driver using regular expressions.
To hide device you should use the hide option:
.. code-block:: ini
[smart]
hide=.*Hide_this_device.*
It is also possible to configure a white list of devices to display.
Example to show only the specified drive:
.. code-block:: ini
[smart]
show=.*Show_this_device.*
Filtering is based on regular expression. Please be sure that your regular
expression works as expected. You can use an online tool like `regex101`_ in
order to test your regular expression.
.. _regex101: https://regex101.com/
You can also hide attributes, for example Self-tests, Errors, etc. Use a comma separated list.
.. code-block:: ini
[smart]
hide_attributes=attribute_name1,attribute_name2

View File

@ -1,36 +0,0 @@
.. _vms:
VMs
===
Glances ``vms`` plugin is designed to display stats about VMs ran on the host.
It's actually support two engines: `Multipass` and `Virsh`.
No Python dependency is needed but Multipass and Virsh binary should be available:
- multipass should be executable from /snap/bin/multipass
- virsh should be executable from /usr/bin/virsh
Note: CPU information is not availble for Multipass VM. Load is not available for Virsh VM.
Configuration file options:
.. code-block:: ini
[vms]
disable=True
# Define the maximum VMs size name (default is 20 chars)
max_name_size=20
# By default, Glances only display running VMs with states:
# 'Running', 'Paused', 'Starting' or 'Restarting'
# Set the following key to True to display all VMs regarding their states
all=False
You can use all the variables ({{foo}}) available in the containers plugin.
Filtering (for hide or show) is based on regular expression. Please be sure that your regular
expression works as expected. You can use an online tool like `regex101`_ in
order to test your regular expression.
.. _Multipass: https://canonical.com/multipass
.. _Virsh: https://www.libvirt.org/manpages/virsh.html

View File

@ -3,22 +3,32 @@
Wi-Fi
=====
*Availability: Linux (with an /proc/net/wireless file) only*
*Availability: Linux*
.. image:: ../_static/wifi.png
Glances displays the Wi-Fi hotspot names and signal quality. If Glances
is ran as root, then all the available hotspots are displayed.
.. note::
You need to install the ``wireless-tools`` package on your system.
In the configuration file, you can define signal quality thresholds:
- ``"Poor"`` quality is between -100 and -85dBm
- ``"Good"`` quality between -85 and -60dBm
- ``"Excellent"`` between -60 and -40dBm
Thresholds for the signal quality can be defined in the configuration file:
It's also possible to disable the scan on a specific interface from the
configuration file (``[wifi]`` section). For example, if you want to
hide the loopback interface (lo) and all the virtual docker interfaces:
.. code-block:: ini
[wifi]
disable=False
hide=lo,docker.*
#show=wlp2s0
# Define SIGNAL thresholds in dBm (lower is better...)
careful=-65
warning=-75
critical=-85

1516
docs/api.rst Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,2 @@
#!/bin/sh
make clean
make html
LC_ALL=C make man

View File

@ -12,43 +12,35 @@ Command-Line Options
.. option:: -V, --version
show the program's version number and exit
show program's version number and exit
.. option:: -d, --debug
enable debug mode
.. option:: --print-completion
generate shell tab completion scripts for Glances CLI
.. option:: -C CONF_FILE, --config CONF_FILE
path to the configuration file
.. option:: -P PLUGIN_DIRECTORY, --plugins PLUGIN_DIRECTORY
path to a directory containing additional plugins
.. option:: --modules-list
display modules (plugins & exports) list and exit
.. option:: --disable-plugin PLUGIN
disable PLUGIN (comma-separated list)
disable PLUGIN (comma separated list)
.. option:: --enable-plugin PLUGIN
enable PLUGIN (comma-separated list)
enable PLUGIN (comma separated list)
.. option:: --stdout PLUGINS_STATS
display stats to stdout (comma-separated list of plugins/plugins.attribute)
display stats to stdout (comma separated list of plugins/plugins.attribute)
.. option:: --export EXPORT
enable EXPORT module (comma-separated list)
enable EXPORT module (comma separated list)
.. option:: --export-csv-file EXPORT_CSV_FILE
@ -68,7 +60,7 @@ Command-Line Options
.. option:: --light, --enable-light
light mode for Curses UI (disable all but the top menu)
light mode for Curses UI (disable all but top menu)
.. option:: -0, --disable-irix
@ -92,7 +84,7 @@ Command-Line Options
.. option:: -5, --disable-top
disable top menu (QuickLook, CPU, MEM, SWAP, and LOAD)
disable top menu (QuickLook, CPU, MEM, SWAP and LOAD)
.. option:: -6, --meangpu
@ -124,8 +116,7 @@ Command-Line Options
.. option:: --browser
start TUI Central Glances Browser
use --browser -w to start WebUI Central Glances Browser
start the client browser (list of servers)
.. option:: --disable-autodiscover
@ -177,7 +168,7 @@ Command-Line Options
.. option:: -w, --webserver
run Glances in web server mode (FastAPI lib needed)
run Glances in web server mode (bottle lib needed)
.. option:: --cached-time CACHED_TIME
@ -201,11 +192,11 @@ Command-Line Options
.. option:: --hide-kernel-threads
hide kernel threads in the process list (not available on Windows)
hide kernel threads in process list (not available on Windows)
.. option:: -b, --byte
display network rate in bytes per second
display network rate in byte per second
.. option:: --diskio-show-ramfs
@ -225,11 +216,11 @@ Command-Line Options
.. option:: --theme-white
optimize display colors for a white background
optimize display colors for white background
.. option:: --disable-check-update
disable online Glances version check
disable online Glances version ckeck
Interactive Commands
--------------------
@ -241,7 +232,7 @@ The following commands (key pressed) are supported while in Glances:
.. note:: On macOS please use ``CTRL-H`` to delete filter.
The filter is a regular expression pattern:
Filter is a regular expression pattern:
- ``gnome``: matches all processes starting with the ``gnome``
string
@ -259,7 +250,7 @@ The following commands (key pressed) are supported while in Glances:
- If CPU iowait ``>60%``, sort processes by I/O read and write
``A``
Enable/disable the Application Monitoring Process
Enable/disable Application Monitoring Process
``b``
Switch between bit/s or Byte/s for network I/O
@ -283,7 +274,7 @@ The following commands (key pressed) are supported while in Glances:
Enable/disable top extended stats
``E``
Erase the current process filter
Erase current process filter
``f``
Show/hide file system and folder monitoring stats
@ -310,7 +301,7 @@ The following commands (key pressed) are supported while in Glances:
Increase selected process nice level / Lower the priority (need right) - Only in standalone mode.
``-``
Decrease selected process nice level / Higher the priority (need right) - Only in standalone mode.
Decrease selected process nice level / Higher the priority (need right) - Only in standalone mode.
``k``
Kill selected process (need right) - Only in standalone mode.
@ -352,7 +343,7 @@ The following commands (key pressed) are supported while in Glances:
Show/hide RAID plugin
``s``
Show/hide sensors plugin
Show/hide sensors stats
``S``
Enable/disable spark lines
@ -361,7 +352,7 @@ The following commands (key pressed) are supported while in Glances:
Sort process by CPU times (TIME+)
``T``
View network I/O as a combination
View network I/O as combination
``u``
Sort processes by USER
@ -369,9 +360,6 @@ The following commands (key pressed) are supported while in Glances:
``U``
View cumulative network I/O
``V``
Show/hide VMS plugin
``w``
Delete finished warning log messages
@ -387,13 +375,13 @@ The following commands (key pressed) are supported while in Glances:
``0``
Enable/disable Irix/Solaris mode
The task's CPU usage will be divided by the total number of CPUs
Task's CPU usage will be divided by the total number of CPUs
``1``
Switch between global CPU and per-CPU stats
``2``
Enable/disable the left sidebar
Enable/disable left sidebar
``3``
Enable/disable the quick look module
@ -402,7 +390,7 @@ The following commands (key pressed) are supported while in Glances:
Enable/disable all but quick look and load module
``5``
Enable/disable the top menu (QuickLook, CPU, MEM, SWAP, and LOAD)
Enable/disable top menu (QuickLook, CPU, MEM, SWAP and LOAD)
``6``
Enable/disable mean GPU mode
@ -413,20 +401,14 @@ The following commands (key pressed) are supported while in Glances:
``/``
Switch between process command line or command name
``F5`` or ``CTRL-R``
Refresh user interface
``SHIFT-LEFT``
Navigation left through the process sort
``SHIFT-RIGHT``
Navigation right through the process sort
``F5``
Refresh stats in curses user interface
``LEFT``
Navigation left through the process name
Navigation leff through process sort
``RIGHT``
Navigation right through the process name
Navigation right through process sort
``UP``
Up in the processes list

View File

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
#
# Glances documentation build configuration file, created by
# sphinx-quickstart on Tue Mar 1 10:53:59 2016.
@ -11,8 +12,8 @@
# All configuration values have a default; values that are commented out
# serve to show the default.
import os
import sys
import os
from datetime import datetime
# If extensions (or modules to document with autodoc) are in another directory,
@ -26,6 +27,7 @@ sys.path.insert(0, os.path.abspath('..'))
# WARNING: Do not move this import before the sys.path.insert() call.
from glances import __version__
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
@ -58,7 +60,7 @@ try:
year = datetime.utcfromtimestamp(int(os.environ['SOURCE_DATE_EPOCH'])).year
except (KeyError, ValueError):
year = datetime.now().year
copyright = f'{year}, {author}'
copyright = '%d, %s' % (year, author)
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@ -123,7 +125,8 @@ html_theme = 'sphinx_rtd_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
html_theme_options = {}
html_theme_options = {
}
# Add any paths that contain custom themes here, relative to this directory.
# html_theme_path = []
@ -163,7 +166,14 @@ html_static_path = ['_static']
# html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
html_sidebars = {'**': ['about.html', 'navigation.html', 'links.html', 'searchbox.html']}
html_sidebars = {
'**': [
'about.html',
'navigation.html',
'links.html',
'searchbox.html'
]
}
# Additional templates that should be rendered to pages, maps page names to
# template names.
@ -217,10 +227,13 @@ htmlhelp_basename = 'Glancesdoc'
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
# 'preamble': '',
# Latex figure (float) alignment
# 'figure_align': 'htbp',
}
@ -229,7 +242,8 @@ latex_elements = {
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'Glances.tex', 'Glances Documentation', 'Nicolas Hennion', 'manual'),
(master_doc, 'Glances.tex', 'Glances Documentation',
'Nicolas Hennion', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
@ -257,7 +271,10 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [('glances', 'glances', 'An eye on your system', '', 1)]
man_pages = [
('glances', 'glances', 'An eye on your system',
'', 1)
]
# If true, show URL addresses after external links.
# man_show_urls = False
@ -269,15 +286,9 @@ man_pages = [('glances', 'glances', 'An eye on your system', '', 1)]
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(
master_doc,
'Glances',
'Glances Documentation',
author,
'Glances',
'One line description of project.',
'Miscellaneous',
),
(master_doc, 'Glances', 'Glances Documentation',
author, 'Glances', 'One line description of project.',
'Miscellaneous'),
]
# Documents to append as an appendix to all manuals.

View File

@ -5,7 +5,7 @@ Configuration
No configuration file is mandatory to use Glances.
Furthermore, a configuration file is needed to access more settings.
Furthermore a configuration file is needed to access more settings.
Location
--------
@ -14,26 +14,25 @@ Location
A template is available in the ``/usr{,/local}/share/doc/glances``
(Unix-like) directory or directly on `GitHub`_.
You can place your ``glances.conf`` file in the following locations:
You can put your own ``glances.conf`` file in the following locations:
==================== =============================================================
``Linux``, ``SunOS`` ~/.config/glances/, /etc/glances/, /usr/share/doc/glances/
``*BSD`` ~/.config/glances/, /usr/local/etc/glances/, /usr/share/doc/glances/
``macOS`` ~/.config/glances/, ~/Library/Application Support/glances/, /usr/local/etc/glances/, /usr/share/doc/glances/
``Linux``, ``SunOS`` ~/.config/glances/, /etc/glances/, /usr/share/docs/glances/
``*BSD`` ~/.config/glances/, /usr/local/etc/glances/, /usr/share/docs/glances/
``macOS`` ~/Library/Application Support/glances/, /usr/local/etc/glances/, /usr/share/docs/glances/
``Windows`` %APPDATA%\\glances\\glances.conf
``All`` + <venv_root_folder>/share/doc/glances/
==================== =============================================================
- On Windows XP, ``%APPDATA%`` is: ``C:\Documents and Settings\<USERNAME>\Application Data``.
- On Windows Vista and later: ``C:\Users\<USERNAME>\AppData\Roaming``.
User-specific options override system-wide options, and options given on
the command line overrides both.
User-specific options override system-wide options and options given on
the command line override either.
Syntax
------
Glances read configuration files in the *ini* syntax.
Glances reads configuration files in the *ini* syntax.
A first section (called global) is available:
@ -41,67 +40,17 @@ A first section (called global) is available:
[global]
# Refresh rate (default is a minimum of 2 seconds)
# Can be overwritten by the -t <sec> option
# It is also possible to overwrite it in each plugin section
# Can be overwrite by the -t <sec> option
# It is also possible to overwrite it in each plugin sections
refresh=2
# Should Glances check if a newer version is available on PyPI ?
check_update=true
# Does Glances should check if a newer version is available on PyPI ?
check_update=false
# History size (maximum number of values)
# Default is 1200 values (~1h with the default refresh rate)
history_size=1200
# Set the way Glances should display the date (default is %Y-%m-%d %H:%M:%S %Z)
#strftime_format="%Y-%m-%d %H:%M:%S %Z"
# Define external directory for loading additional plugins
# The layout follows the glances standard for plugin definitions
#plugin_dir=/home/user/dev/plugins
# Default is 28800: 1 day with 1 point every 3 seconds
history_size=28800
than a second one concerning the user interface:
.. code-block:: ini
[outputs]
# Options for all UIs
#--------------------
# Separator in the Curses and WebUI interface (between top and others plugins)
separator=True
# Set the the Curses and WebUI interface left menu plugin list (comma-separated)
#left_menu=network,wifi,connections,ports,diskio,fs,irq,folders,raid,smart,sensors,now
# Limit the number of processes to display (in the WebUI)
max_processes_display=25
# Options for WebUI
#------------------
# Set URL prefix for the WebUI and the API
# Example: url_prefix=/glances/ => http://localhost/glances/
# Note: The final / is mandatory
# Default is no prefix (/)
#url_prefix=/glances/
# Set root path for WebUI statics files
# Why ? On Debian system, WebUI statics files are not provided.
# You can download it in a specific folder
# thanks to https://github.com/nicolargo/glances/issues/2021
# then configure this folder with the webui_root_path key
# Default is folder where glances_restful_api.py is hosted
#webui_root_path=
# CORS options
# Comma separated list of origins that should be permitted to make cross-origin requests.
# Default is *
#cors_origins=*
# Indicate that cookies should be supported for cross-origin requests.
# Default is True
#cors_credentials=True
# Comma separated list of HTTP methods that should be allowed for cross-origin requests.
# Default is *
#cors_methods=*
# Comma separated list of HTTP request headers that should be supported for cross-origin requests.
# Default is *
#cors_headers=*
# Define SSL files (keyfile_password is optional)
#ssl_keyfile=./glances.local+3-key.pem
#ssl_keyfile_password=kfp
#ssl_certfile=./glances.local+3.pem
Each plugin, export module, and application monitoring process (AMP) can
have a section. Below is an example for the CPU plugin:
Each plugin, export module and application monitoring process (AMP) can
have a section. Below an example for the CPU plugin:
.. code-block:: ini
@ -141,16 +90,16 @@ or a Nginx AMP:
.. code-block:: ini
[amp_nginx]
# Nginx status page should be enabled (https://easyengine.io/tutorials/nginx/status-page/)
# Nginx status page should be enable (https://easyengine.io/tutorials/nginx/status-page/)
enable=true
regex=\/usr\/sbin\/nginx
refresh=60
one_line=false
status_url=http://localhost/nginx_status
With Glances 3.0 or higher, you can use dynamic configuration values
by utilizing system commands. For example, if you want to set the prefix
of an InfluxDB export to the current hostname, use:
With Glances 3.0 or higher it is also possible to use dynamic configuration
value using system command. For example, if you to set the prefix of an
InfluxDB export to the current hostname, use:
.. code-block:: ini
@ -171,17 +120,16 @@ Logging
Glances logs all of its internal messages to a log file.
``DEBUG`` messages can be logged using the ``-d`` option on the command
``DEBUG`` messages can been logged using the ``-d`` option on the command
line.
The location of the Glances log file depends on your operating system. You can
display the full path of the Glances log file using the ``glances -V``
command line.
The location of the Glances depends of your operating system. You could
displayed the Glances log file full path using the``glances -V`` command line.
The file is automatically rotated when its size exceeds 1 MB.
The file is automatically rotate when the size is higher than 1 MB.
If you want to use another system path or change the log message, you
can use your logger configuration. First of all, you have to create
can use your own logger configuration. First of all, you have to create
a ``glances.json`` file with, for example, the following content (JSON
format):
@ -253,7 +201,7 @@ and start Glances using the following command line:
LOG_CFG=<path>/glances.json glances
.. note::
Replace ``<path>`` with the directory where your ``glances.json`` file
Replace ``<path>`` by the folder where your ``glances.json`` file
is hosted.
.. _GitHub: https://raw.githubusercontent.com/nicolargo/glances/master/conf/glances.conf

View File

@ -3,59 +3,26 @@
Docker
======
Glances can be installed through Docker, allowing you to run it without
installing all the Python dependencies directly on your system. Once you
have `docker installed <https://docs.docker.com/install/>`_, you can
Glances can be installed through Docker, allowing you to run it without installing all the python dependencies directly on your system. Once you have [docker installed](https://docs.docker.com/install/), you can
Get the Glances container:
.. code-block:: console
docker pull nicolargo/glances:<version or tag>
docker pull nicolargo/glances:<version>
Available tags (all images are based on both Alpine and Ubuntu Operating Systems):
Available tags (all images are based on both Alpine and Ubuntu Operating System):
.. list-table::
:widths: 25 15 25 35
:header-rows: 1
* - Image Tag
- OS
- Target
- Installed Dependencies
* - `latest-full`
- Alpine
- Latest Release
- Full
* - `latest`
- Alpine
- Latest Release
- Minimal + (FastAPI & Docker)
* - `dev`
- Alpine
- develop
- Full
* - `ubuntu-latest-full`
- Ubuntu
- Latest Release
- Full
* - `ubuntu-latest`
- Ubuntu
- Latest Release
- Minimal + (FastAPI & Docker)
* - `ubuntu-dev`
- Ubuntu
- develop
- Full
.. warning::
Tags containing `dev` directly target the `develop` branch and could be unstable.
For example, if you want a full Alpine Glances image (latest release) with all dependencies, go for `latest-full`.
- *latest-full* for a full Alpine Glances image (latest release) with all dependencies
- *latest* for a basic Alpine Glances (latest release) version with minimal dependencies (Bottle and Docker)
- *dev* for a basic Alpine Glances image (based on development branch) with all dependencies (Warning: may be instable)
- *ubuntu-latest-full* for a full Ubuntu Glances image (latest release) with all dependencies
- *ubuntu-latest* for a basic Ubuntu Glances (latest release) version with minimal dependencies (Bottle and Docker)
- *ubuntu-dev* for a basic Ubuntu Glances image (based on development branch) with all dependencies (Warning: may be instable)
You can also specify a version (example: 3.4.0). All available versions can be found on `DockerHub`_.
An example of how to pull the `latest` tag:
An Example to pull the `latest` tag:
.. code-block:: console
@ -65,7 +32,7 @@ Run the container in *console mode*:
.. code-block:: console
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host --network host -it docker.io/nicolargo/glances
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it docker.io/nicolargo/glances
Additionally, if you want to use your own glances.conf file, you can create your own Dockerfile:
@ -79,27 +46,19 @@ Alternatively, you can specify something along the same lines with docker run op
.. code-block:: console
docker run -v `pwd`/glances.conf:/etc/glances/glances.conf -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host -it docker.io/nicolargo/glances
docker run -v `pwd`/glances.conf:/glances/conf/glances.conf -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host -it docker.io/nicolargo/glances
Where \`pwd\`/glances.conf is a local directory containing your glances.conf file.
Glances by default uses the container's OS information in the UI. If you want to display the host's OS info, you can do that by mounting `/etc/os-release` into the container.
Here is a simple docker run example for that:
.. code-block:: console
docker run -v /etc/os-release:/etc/os-release:ro docker.io/nicolargo/glances
Run the container in *Web server mode* (notice the `GLANCES_OPT` environment variable setting parameters for the glances startup command):
.. code-block:: console
docker run -d --restart="always" -p 61208-61209:61208-61209 -e GLANCES_OPT="-w" -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host docker.io/nicolargo/glances
docker run -d --restart="always" -p 61208-61209:61208-61209 -e GLANCES_OPT="-w" -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host docker.io/nicolargo/glances
Note: if you want to see the network interface stats within the container, add --net=host --privileged
You can also include Glances container in you own `docker-compose.yml`. A realistic example includes a "traefik" reverse proxy serving an "whoami" app container plus a Glances container, providing a simple and efficient monitoring webui.
You can also include Glances container in you own `docker-compose.yml`. Here's a realistic example including a "traefik" reverse proxy serving an "whoami" app container plus a Glances container, providing a simple and efficient monitoring webui.
.. code-block:: console
@ -121,13 +80,11 @@ You can also include Glances container in you own `docker-compose.yml`. A realis
- "traefik.frontend.rule=Host:whoami.docker.localhost"
monitoring:
image: nicolargo/glances:latest
image: nicolargo/glances:latest-alpine
restart: always
pid: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# Uncomment the below line if you want glances to display host OS detail instead of container's
# - /etc/os-release:/etc/os-release:ro
environment:
- "GLANCES_OPT=-w"
labels:
@ -154,8 +111,6 @@ and generate the password file (the default login is ``glances``, add the ``--us
glances -s --password
Note: or ``glances -w --password`` for the web server mode.
which will prompt you to answer the following questions:
.. code-block:: console
@ -187,11 +142,9 @@ and make it visible to your container by adding it to ``docker-compose.yml`` as
image: nicolargo/glances:latest
restart: always
environment:
- "GLANCES_OPT=-w --password"
- GLANCES_OPT="-w --password"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
# Uncomment the below line if you want glances to display host OS detail instead of container's
# - /etc/os-release:/etc/os-release:ro
pid: host
secrets:
- source: glances_password
@ -251,8 +204,6 @@ Include the `deploy` section in compose file as specified below in the example s
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# Uncomment the below line if you want glances to display host OS detail instead of container's
# - /etc/os-release:/etc/os-release:ro
environment:
- "GLANCES_OPT=-w"
# For nvidia GPUs

View File

@ -3,51 +3,8 @@
F.A.Q
=====
Any encoding issue ?
--------------------
*Any encoding issue ?*
Try to run Glances with the following command line:
LANG=en_US.UTF-8 LC_ALL= glances
Container memory stats not displayed ?
--------------------------------------
On ARM64, Docker needs to be configured to allow access to the memory stats.
Edit the /boot/firmware/cmdline.txt and add the following configuration key:
cgroup_enable=memory
Netifaces issue ?
-----------------
Previously, Glances uses Netifaces to get network interfaces information.
Now, Glances uses Netifaces2.
Please uninstall Netifaces and install Netifaces2 instead.
Extra note: Glances 4.5 or higher do not use Netifaces/Netifaces2 anymore.
On Debian/Ubuntu Operating Systems, Webserver display a blank screen ?
----------------------------------------------------------------------
For some reason, the Glances Debian/Ubuntu packages do not include the Web UI static files.
Please read: https://github.com/nicolargo/glances/issues/2021 for workaround and more information.
Glances said that my computer has no free memory, is it normal ?
----------------------------------------------------------------
On Linux, Glances shows by default the free memory.
Free memory can be low, it's a "normal" behavior because Linux uses free memory for disk caching
to improve performance. More information can be found here: https://linuxatemyram.com/.
If you want to display the "available" memory instead of the "free" memory, you can uses the
the following configuration key in the Glances configuration file:
[mem]
# Display available memory instead of used memory
available=True

View File

@ -1,46 +0,0 @@
.. _fetch:
Fetch
=====
The fetch mode is used to get and share a quick look of a machine using the
``fetch`` option. In this mode, current stats are displayed on the console in
a fancy way.
.. code-block:: console
$ glances --fetch
Results look like this:
.. image:: _static/screenshot-fetch.png
It is also possible to use a custom template with the ``--fetch-template </path/to/template.jinja>`` option.
Some examples are provided in the ``conf/fetch-templates/`` directory. Please feel free to
customize them or create your own template (contribution via PR are welcome).
The format of the template is based on the Jinja2 templating engine and can use all the stats
available in Glances through the ``gl`` variable (an instance of the :ref:`Glances Python API<api>`).
For example, the default template is define as:
.. code-block:: jinja
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ {{ gl.system['hostname'] }}{{ ' - ' + gl.ip['address'] if gl.ip['address'] else '' }}
⚙️ {{ gl.system['hr_name'] }} | Uptime: {{ gl.uptime }}
💡 LOAD {{ '%0.2f'| format(gl.load['min1']) }} {{ '%0.2f'| format(gl.load['min5']) }} {{ '%0.2f'| format(gl.load['min15']) }}
⚡ CPU {{ gl.bar(gl.cpu['total']) }} {{ gl.cpu['total'] }}% of {{ gl.core['log'] }} cores
🧠 MEM {{ gl.bar(gl.mem['percent']) }} {{ gl.mem['percent'] }}% ({{ gl.auto_unit(gl.mem['used']) }} {{ gl.auto_unit(gl.mem['total']) }})
{% for fs in gl.fs.keys() %}💾 {% if loop.index == 1 %}DISK{% else %} {% endif %} {{ gl.bar(gl.fs[fs]['percent']) }} {{ gl.fs[fs]['percent'] }}% ({{ gl.auto_unit(gl.fs[fs]['used']) }} {{ gl.auto_unit(gl.fs[fs]['size']) }}) for {{ fs }}
{% endfor %}{% for net in gl.network.keys() %}📡 {% if loop.index == 1 %}NET{% else %} {% endif %} ↓ {{ gl.auto_unit(gl.network[net]['bytes_recv_rate_per_sec']) }}b/s ↑ {{ gl.auto_unit(gl.network[net]['bytes_sent_rate_per_sec']) }}b/s for {{ net }}
{% endfor %}
🔥 TOP PROCESS by CPU
{% for process in gl.top_process() %}{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }} ⚡ {{ process['cpu_percent'] }}% CPU{{ ' ' * (8 - (gl.auto_unit(process['cpu_percent']) | length)) }} 🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM
{% endfor %}
🔥 TOP PROCESS by MEM
{% for process in gl.top_process(sorted_by='memory_percent', sorted_by_secondary='cpu_percent') %}{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }} 🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM{{ ' ' * (7 - (gl.auto_unit(process['memory_info']['rss']) | length)) }} ⚡ {{ process['cpu_percent'] }}% CPU
{% endfor %}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

View File

@ -11,12 +11,12 @@ SYNOPSIS
DESCRIPTION
-----------
**glances** is a cross-platform curses-based monitoring tool that aims
to present a maximum of information in a minimum of space, ideally fitting
in a classic 80x24 terminal or larger for more details. It can adapt
dynamically to the displayed information depending on the terminal size.
It can also work in client/server mode.
Remote monitoring can be performed via a terminal or web interface.
**glances** is a cross-platform curses-based monitoring tool which aims
to present a maximum of information in a minimum of space, ideally to
fit in a classical 80x24 terminal or higher to have additional
information. It can adapt dynamically the displayed information
depending on the terminal size. It can also work in client/server mode.
Remote monitoring could be done via terminal or web interface.
**glances** is written in Python and uses the *psutil* library to get
information from your system.
@ -34,25 +34,23 @@ CONFIGURATION
EXAMPLES
--------
Monitor local machine, also called standalone mode,
with the Text-based user interface (TUI):
Monitor local machine (standalone mode):
$ glances
To monitor the local machine with the Web user interface (WebUI),
, run the following command line:
Monitor local machine with the web interface (Web UI), run the following command line:
$ glances -w
then, open a Web Browser to the provided URL.
and open a Web browser with the returned URL
Monitor local machine and export stats to a CSV file:
$ glances --export csv --export-csv-file /tmp/glances.csv
Monitor local machine and export stats to an InfluxDB server with 5s
Monitor local machine and export stats to a InfluxDB server with 5s
refresh time (also possible to export to OpenTSDB, Cassandra, Statsd,
ElasticSearch, RabbitMQ, and Riemann):
ElasticSearch, RabbitMQ and Riemann):
$ glances -t 5 --export influxdb
@ -72,16 +70,10 @@ Connect to a Glances server and export stats to a StatsD server:
$ glances -c <ip_server> --export statsd
Start the TUI Central Glances Browser:
Start the client browser (browser mode):
$ glances --browser
Start the WebUI Central Glances Browser (new in Glances 4.3 or higher):
$ glances --browser -w
If you do not want to see the local Glances Web Server in the browser list please use --disable-autodiscover option.
AUTHOR
------

View File

@ -9,9 +9,9 @@ following:
.. code-block:: ini
[couchdb]
[mongodb]
host=localhost
port=5984
port=27017
db=glances
user=root
password=example
@ -20,31 +20,24 @@ and run Glances with:
.. code-block:: console
$ glances --export couchdb
$ glances --export mongodb
Documents are stored in native ``JSON`` format. Glances adds ``"type"``
and ``"time"`` entries:
Documents are stored in native the configured database (glances by default)
with one collection per plugin.
- ``type``: plugin name
- ``time``: timestamp (format: "2016-09-24T16:39:08.524Z")
Example of Couch Document for the load stats:
Example of MongoDB Document for the load stats:
.. code-block:: json
{
"_id": "36cbbad81453c53ef08804cb2612d5b6",
"_rev": "1-382400899bec5615cabb99aa34df49fb",
"min15": 0.33,
"time": "2016-09-24T16:39:08.524Z",
"min5": 0.4,
"cpucore": 4,
"load_warning": 1,
"min1": 0.5,
"history_size": 28800,
"load_critical": 5,
"type": "load",
"load_careful": 0.7
_id: ObjectId('63d78ffee5528e543ce5af3a'),
min1: 1.46337890625,
min5: 1.09619140625,
min15: 1.07275390625,
cpucore: 4,
history_size: 1200,
load_disable: 'False',
load_careful: 0.7,
load_warning: 1,
load_critical: 5
}
You can view the result using the CouchDB utils URL: http://127.0.0.1:5984/_utils/database.html?glances.

View File

@ -1,110 +0,0 @@
.. _duckdb:
DuckDB
===========
DuckDB is an in-process SQL OLAP database management system.
You can export statistics to a ``DuckDB`` server.
The connection should be defined in the Glances configuration file as
following:
.. code-block:: ini
[duckdb]
# database defines where data are stored, can be one of:
# /path/to/glances.db (see https://duckdb.org/docs/stable/clients/python/dbapi#file-based-connection)
# :memory:glances (see https://duckdb.org/docs/stable/clients/python/dbapi#in-memory-connection)
# Or anyone else supported by the API (see https://duckdb.org/docs/stable/clients/python/dbapi)
database=/tmp/glances.db
and run Glances with:
.. code-block:: console
$ glances --export duckdb
Data model
-----------
The data model is composed of one table per Glances plugin.
Example:
.. code-block:: python
>>> import duckdb
>>> db = duckdb.connect(database='/tmp/glances.db', read_only=True)
>>> db.sql("SELECT * from cpu")
┌─────────────────────┬─────────────────┬────────┬────────┬────────┬───┬────────────────────┬─────────────────────┬──────────────────────┬──────────────────────┬──────────────────────┐
│ time │ hostname_id │ total │ user │ nice │ … │ cpu_iowait_warning │ cpu_iowait_critical │ cpu_ctx_switches_c… │ cpu_ctx_switches_w… │ cpu_ctx_switches_c… │
│ time with time zone │ varchar │ double │ double │ double │ │ double │ double │ double │ double │ double │
├─────────────────────┼─────────────────┼────────┼────────┼────────┼───┼────────────────────┼─────────────────────┼──────────────────────┼──────────────────────┼──────────────────────┤
│ 11:50:25+00 │ nicolargo-xps15 │ 8.0 │ 5.6 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:50:27+00 │ nicolargo-xps15 │ 4.3 │ 3.2 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:50:29+00 │ nicolargo-xps15 │ 4.3 │ 3.2 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:50:31+00 │ nicolargo-xps15 │ 14.9 │ 15.7 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:50:33+00 │ nicolargo-xps15 │ 14.9 │ 15.7 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:50:35+00 │ nicolargo-xps15 │ 8.2 │ 7.8 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:50:37+00 │ nicolargo-xps15 │ 8.2 │ 7.8 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:50:39+00 │ nicolargo-xps15 │ 12.7 │ 10.3 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:50:41+00 │ nicolargo-xps15 │ 12.7 │ 10.3 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:50:43+00 │ nicolargo-xps15 │ 12.2 │ 10.3 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │
│ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │
│ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │
│ 11:51:29+00 │ nicolargo-xps15 │ 10.1 │ 7.4 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:51:32+00 │ nicolargo-xps15 │ 10.1 │ 7.4 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:51:34+00 │ nicolargo-xps15 │ 6.6 │ 4.9 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:51:36+00 │ nicolargo-xps15 │ 6.6 │ 4.9 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:51:38+00 │ nicolargo-xps15 │ 9.9 │ 7.5 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:51:40+00 │ nicolargo-xps15 │ 9.9 │ 7.5 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:51:42+00 │ nicolargo-xps15 │ 4.0 │ 3.1 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:51:44+00 │ nicolargo-xps15 │ 4.0 │ 3.1 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:51:46+00 │ nicolargo-xps15 │ 11.1 │ 8.8 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
│ 11:51:48+00 │ nicolargo-xps15 │ 11.1 │ 8.8 │ 0.0 │ … │ 5.625 │ 6.25 │ 640000.0 │ 720000.0 │ 800000.0 │
├─────────────────────┴─────────────────┴────────┴────────┴────────┴───┴────────────────────┴─────────────────────┴──────────────────────┴──────────────────────┴──────────────────────┤
│ 41 rows (20 shown) 47 columns (10 shown) │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
>>> db.sql("SELECT * from cpu").fetchall()[0]
(datetime.time(11, 50, 25, tzinfo=datetime.timezone.utc), 'nicolargo-xps15', 8.0, 5.6, 0.0, 2.3, 91.9, 0.1, 0.0, 0.0, 0.0, 0, 0, 0, 0, 16, 2.4103684425354004, 90724823, 0, 63323797, 0, 30704572, 0, 0, 0, 1200.0, 65.0, 75.0, 85.0, True, 50.0, 70.0, 90.0, True, 50.0, 70.0, 90.0, True, 50.0, 70.0, 90.0, 5.0, 5.625, 6.25, 640000.0, 720000.0, 800000.0)
>>> db.sql("SELECT * from network")
┌─────────────────────┬─────────────────┬────────────────┬────────────┬────────────┬───┬─────────────────────┬────────────────┬────────────────────┬────────────────────┬───────────────────┐
│ time │ hostname_id │ key_id │ bytes_sent │ bytes_recv │ … │ network_tx_critical │ network_hide │ network_hide_no_up │ network_hide_no_ip │ network_hide_zero │
│ time with time zone │ varchar │ varchar │ int64 │ int64 │ │ double │ varchar │ boolean │ boolean │ boolean │
├─────────────────────┼─────────────────┼────────────────┼────────────┼────────────┼───┼─────────────────────┼────────────────┼────────────────────┼────────────────────┼───────────────────┤
│ 11:50:25+00 │ nicolargo-xps15 │ interface_name │ 407761 │ 32730 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:50:27+00 │ nicolargo-xps15 │ interface_name │ 2877 │ 4857 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:50:29+00 │ nicolargo-xps15 │ interface_name │ 44504 │ 32555 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:50:31+00 │ nicolargo-xps15 │ interface_name │ 1092285 │ 48600 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:50:33+00 │ nicolargo-xps15 │ interface_name │ 150119 │ 43805 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:50:35+00 │ nicolargo-xps15 │ interface_name │ 34424 │ 14825 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:50:37+00 │ nicolargo-xps15 │ interface_name │ 19382 │ 33614 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:50:39+00 │ nicolargo-xps15 │ interface_name │ 53060 │ 39780 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:50:41+00 │ nicolargo-xps15 │ interface_name │ 371914 │ 78626 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:50:43+00 │ nicolargo-xps15 │ interface_name │ 82356 │ 60612 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │
│ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │
│ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │ · │
│ 11:51:29+00 │ nicolargo-xps15 │ interface_name │ 3766 │ 9977 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:51:32+00 │ nicolargo-xps15 │ interface_name │ 188036 │ 18668 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:51:34+00 │ nicolargo-xps15 │ interface_name │ 543 │ 2451 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:51:36+00 │ nicolargo-xps15 │ interface_name │ 8247 │ 7275 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:51:38+00 │ nicolargo-xps15 │ interface_name │ 7252 │ 986 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:51:40+00 │ nicolargo-xps15 │ interface_name │ 172 │ 132 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:51:42+00 │ nicolargo-xps15 │ interface_name │ 8080 │ 6640 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:51:44+00 │ nicolargo-xps15 │ interface_name │ 19660 │ 17830 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:51:46+00 │ nicolargo-xps15 │ interface_name │ 1007030 │ 84170 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
│ 11:51:48+00 │ nicolargo-xps15 │ interface_name │ 128947 │ 18087 │ … │ 90.0 │ [docker.*, lo] │ true │ true │ true │
├─────────────────────┴─────────────────┴────────────────┴────────────┴────────────┴───┴─────────────────────┴────────────────┴────────────────────┴────────────────────┴───────────────────┤
│ 41 rows (20 shown) 28 columns (10 shown) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
.. _duckdb: https://duckdb.org/

View File

@ -3,24 +3,8 @@
Gateway To Other Services
=========================
Glances can exports stats in files or to other services like databases, message queues, etc.
Each exporter has its own configuration options, which can be set in the Glances
configuration file (`glances.conf`).
A common options section is also available:
is the `exclude_fields` option, which allows you to specify
.. code-block:: ini
[export]
# Common section for all exporters
# Do not export following fields (comma separated list of regex)
exclude_fields=.*_critical,.*_careful,.*_warning,.*\.key$
This section describes the available exporters and how to configure them:
Glances can exports stats to a CSV file. Also, it can act as a gateway
to providing stats to multiple services (see list below).
.. toctree::
:maxdepth: 2
@ -30,18 +14,15 @@ This section describes the available exporters and how to configure them:
couchdb
elastic
graph
graphite
influxdb
json
kafka
mqtt
mongodb
nats
opentsdb
prometheus
rabbitmq
restful
riemann
statsd
timescaledb
zeromq

View File

@ -17,19 +17,19 @@ Glances InfluxDB data model:
+---------------+-----------------------+-----------------------+
| Measurement | Fields | Tags |
+===============+=======================+=======================+
| cpu | user | hostname |
| cpu | user | hostname |
| | system | |
| | iowait... | |
+---------------+-----------------------+-----------------------+
| network | read_bytes | hostname |
| | write_bytes | disk_name |
| | time_since_update... | |
| | | |
|  | | |
+---------------+-----------------------+-----------------------+
| diskio | rx | hostname |
| | tx | interface_name |
| | time_since_update... | |
| | | |
|  | | |
+---------------+-----------------------+-----------------------+
| docker | cpu_percent | hostname |
| | memory_usage... | name |
@ -78,7 +78,7 @@ configuration file (no limit on columns number).
Note: if you want to use SSL, please set 'protocol=https'.
InfluxDB v2 (from InfluxDB v1.8.x/Flux and InfluxDB <v3.x)
InfluxDB v2 (from InfluxDB v1.8.x/Flux and InfluxDB v2.x)
---------------------------------------------------------
Note: The InfluxDB v2 client (https://pypi.org/project/influxdb-client/)
@ -90,14 +90,12 @@ following:
.. code-block:: ini
[influxdb2]
# Configuration for the --export influxdb2 option
# https://influxdb.com/
host=localhost
port=8086
protocol=http
org=nicolargo
bucket=glances
token=PUT_YOUR_INFLUXDB2_TOKEN_HERE
token=EjFUTWe8U-MIseEAkaVIgVnej_TrnbdvEcRkaB1imstW7gapSqy6_6-8XD-yd51V0zUUpDy-kAdVD1purDLuxA==
# Set the interval between two exports (in seconds)
# If the interval is set to 0, the Glances refresh time is used (default behavor)
#interval=0
@ -109,7 +107,7 @@ following:
#prefix=foo
# Following tags will be added for all measurements
# You can also use dynamic values.
# Note: hostname and name (for process) are always added as a tag
# Note: hostname is always added as a tag
#tags=foo:bar,spam:eggs,domain:`domainname`
and run Glances with:
@ -120,46 +118,6 @@ and run Glances with:
Note: if you want to use SSL, please set 'protocol=https'.
InfluxDB v3 (for InfluxDB 3.x)
------------------------------
Note: The InfluxDB v3 client (https://pypi.org/project/influxdb3-python/)
is only available for Python 3.8 or higher.
The connection should be defined in the Glances configuration file as
following:
.. code-block:: ini
[influxdb3]
# Configuration for the --export influxdb3 option
# https://influxdb.com/
host=http://localhost:8181
org=nicolargo
database=glances
token=PUT_YOUR_INFLUXDB3_TOKEN_HERE
# Set the interval between two exports (in seconds)
# If the interval is set to 0, the Glances refresh time is used (default behavor)
#interval=0
# Prefix will be added for all measurement name
# Ex: prefix=foo
# => foo.cpu
# => foo.mem
# You can also use dynamic values
#prefix=foo
# Following tags will be added for all measurements
# You can also use dynamic values.
# Note: hostname and name (for process) are always added as a tag
#tags=foo:bar,spam:eggs,domain:`domainname`
and run Glances with:
.. code-block:: console
$ glances --export influxdb3
Note: if you want to use SSL, please set host with 'https' scheme instead of 'http'.
Grafana
-------

View File

@ -9,35 +9,42 @@ following:
.. code-block:: ini
[mongodb]
[couchdb]
host=localhost
port=27017
db=glances
port=
user=root
password=example
db=glances
and run Glances with:
.. code-block:: console
$ glances --export mongodb
$ glances --export couchdb
Documents are stored in native the configured database (glances by default)
with one collection per plugin.
Documents are stored in native ``JSON`` format. Glances adds ``"type"``
and ``"time"`` entries:
Example of MongoDB Document for the load stats:
- ``type``: plugin name
- ``time``: timestamp (format: "2016-09-24T16:39:08.524828Z")
Example of Couch Document for the load stats:
.. code-block:: json
{
_id: ObjectId('63d78ffee5528e543ce5af3a'),
min1: 1.46337890625,
min5: 1.09619140625,
min15: 1.07275390625,
cpucore: 4,
history_size: 1200,
load_disable: 'False',
load_careful: 0.7,
load_warning: 1,
load_critical: 5
"_id": "36cbbad81453c53ef08804cb2612d5b6",
"_rev": "1-382400899bec5615cabb99aa34df49fb",
"min15": 0.33,
"time": "2016-09-24T16:39:08.524828Z",
"min5": 0.4,
"cpucore": 4,
"load_warning": 1,
"min1": 0.5,
"history_size": 28800,
"load_critical": 5,
"type": "load",
"load_careful": 0.7
}
You can view the result using the CouchDB utils URL: http://127.0.0.1:5984/_utils/database.html?glances.

View File

@ -11,15 +11,12 @@ following:
[mqtt]
host=localhost
# Overwrite device name in the topic (see detail in PR#2701)
#devicename=localhost
port=883
tls=true
user=glances
password=glances
topic=glances
topic_structure=per-metric
callback_api_version=2
and run Glances with:

View File

@ -1,68 +0,0 @@
.. _nats:
NATS
====
NATS is a message broker.
You can export statistics to a ``NATS`` server.
The connection should be defined in the Glances configuration file as
following:
.. code-block:: ini
[nats]
host=nats://localhost:4222
prefix=glances
and run Glances with:
.. code-block:: console
$ glances --export nats
Data model
-----------
Glances stats are published as JSON messagesto the following subjects:
<prefix>.<plugin>
Example:
CPU stats are published to glances.cpu
So a simple Python client will subscribe to this subject with:
import asyncio
import nats
async def main():
nc = nats.NATS()
await nc.connect(servers=["nats://localhost:4222"])
future = asyncio.Future()
async def cb(msg):
nonlocal future
future.set_result(msg)
await nc.subscribe("glances.cpu", cb=cb)
# Wait for message to come in
print("Waiting (max 30 seconds) for a message on 'glances' subject...")
msg = await asyncio.wait_for(future, 30)
print(msg.subject, msg.data)
if __name__ == '__main__':
asyncio.run(main())
To subscribe to all Glannces stats use wildcard:
await nc.subscribe("glances.*", cb=cb)

View File

@ -4,8 +4,8 @@ Prometheus
==========
You can export statistics to a ``Prometheus`` server through an exporter.
When the *--export prometheus* is used, Glances creates a Prometheus exporter
listening on <host:port> (defined in the Glances configuration file).
When the *--export-prometheus* is used, Glances creates a Prometheus exporter
listening on <host:port> (define in the Glances configuration file).
.. code-block:: ini

Some files were not shown because too many files have changed in this diff Show More