diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..9a2f1da --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,36 @@ +--- +name: CI + +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + - develop + tags: + - v* + pull_request: + branches: + - main + - develop + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install pylint / pyflakes + run: sudo apt-get install --yes pylint pyflakes3 + + - name: Install pve_exporter + run: sudo pip install -e . + + - name: Run pylint + run: pylint pve_exporter + + - name: Run pyflakes + run: pyflakes3 src/pve_exporter diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml new file mode 100644 index 0000000..bc57d13 --- /dev/null +++ b/.github/workflows/pypi.yml @@ -0,0 +1,24 @@ +--- +name: Upload Python Package + +# yamllint disable-line rule:truthy +on: + release: + types: [created] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: sudo apt-get install --yes python3-wheel twine + + - name: Build and publish + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} + run: | + python3 setup.py sdist bdist_wheel + twine upload dist/* diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 98a51f4..0000000 --- a/.travis.yml +++ /dev/null @@ -1,73 +0,0 @@ ---- -os: linux -dist: bionic -services: docker -language: python -python: - - 3.8 - - 3.7 - - 3.6 -cache: - directories: - - $HOME/.cache/pip -env: - global: - - IMAGE_NAME: prompve/prometheus-pve-exporter - - IMAGE_BUILD_ID: "travis-build-${TRAVIS_BUILD_ID}" - - DOCKER_USERNAME: prompveci - # travis encrypt DOCKER_PASSWORD=abcdefg[...] - - secure: "UL0vSTw+8nKj1+a+5k2urlBdQCfrDYbWDWrEcIUN42c8m44OSKgUO2LLDlnJMVIrEdgOuY9pxaNjhkRRDSP8+RFDCwX2N355610qONcBAcUhZZbVXCU9aR29Lhnm1LZq13LDgs+05P9vQ9Aye2MSTKjsEPj1Rrx97GUNFUBfKbqhiV5e/++MLYHtcjsPSLjgBAfA80Tme/FwGbvBzL64OLUl1rmXnaUlAQ60FCag078RS8LlsMNZFEU11f1+DWxl9VdYdH83AzKN/t/xY2+qJu0eUksOvxFM19jMIrC9+KWzvSio3GpbPlA1R/eqpE8iWHx3Zo0tyeVllraYsxX4Wyn7XUqYVzw/5DmXA6gHYtgayrjDk6oA2qpsMmg9w+Q4fhQz7AJjLgNd/vXHwUBByzdgPfjT98zzUUwi2784o6e/+B7bZ3EeLSgrL0VuootmI4LTvlPjwFlWBKij9cQGSzSMiGomr7RcmZGPU9gFyA/EYkglxFV0sSMJgEOBi4Lostc8rEXThKF4eDcDQo7GdI4QvQ+0tQLzsbDAg17pm14+1b9WwqrwTCW1wCgR0T8VwH7wFvaiGnLbFuIWDT5KK4nSq9YOwYB+eLnO85N58ideqrM3o6FKnHqwscVzN4uIUMtCUgGgzS/gP+N7DMjN/OM2lkPIg4/fY45+5bEYhKI=" -stages: - - name: test - - name: docker image - - name: publish - if: tag IS present -install: - - pip install -U pip wheel - - pip install -r test-requirements.txt - - pip install -e . -script: - - pylint pve_exporter - - pyflakes src/pve_exporter -jobs: - include: - - stage: docker image - install: skip - before_script: - - docker login --username="${DOCKER_USERNAME}" --password="${DOCKER_PASSWORD}" - script: - - > - docker build - --tag "${IMAGE_NAME}:${IMAGE_BUILD_ID}" - --build-arg build_log_label="Travis CI Build #${TRAVIS_BUILD_NUMBER}" - --build-arg build_log_url="${TRAVIS_BUILD_WEB_URL}" - . - - docker push "${IMAGE_NAME}:${IMAGE_BUILD_ID}" - - stage: publish - install: skip - before_script: - - docker login --username="${DOCKER_USERNAME}" --password="${DOCKER_PASSWORD}" - script: - - export VERSION_PATCH="${TRAVIS_TAG#v}" - - export VERSION_MINOR="${VERSION_PATCH%.*}" - - export VERSION_MAJOR="${VERSION_MINOR%.*}" - - docker pull "${IMAGE_NAME}:${IMAGE_BUILD_ID}" - - docker tag "${IMAGE_NAME}:${IMAGE_BUILD_ID}" "${IMAGE_NAME}:${VERSION_PATCH}" - - docker tag "${IMAGE_NAME}:${IMAGE_BUILD_ID}" "${IMAGE_NAME}:${VERSION_MINOR}" - - docker tag "${IMAGE_NAME}:${IMAGE_BUILD_ID}" "${IMAGE_NAME}:${VERSION_MAJOR}" - - docker tag "${IMAGE_NAME}:${IMAGE_BUILD_ID}" "${IMAGE_NAME}:latest" - - docker push "${IMAGE_NAME}:${VERSION_PATCH}" - - docker push "${IMAGE_NAME}:${VERSION_MINOR}" - - docker push "${IMAGE_NAME}:${VERSION_MAJOR}" - - docker push "${IMAGE_NAME}:latest" - - stage: publish - install: skip - script: skip - deploy: - on: - all_branches: true - provider: pypi - distributions: sdist bdist_wheel - username: "__token__" - password: - secure: G8okbVzDXXZ6EJb5pMV/e6qsCJBK1i4sFONnfhOO3wD4cQrmpoUYnDWUCrg7yt44E6dE7rS1U0+YndUrxURjGO+hHXxnTNQ5Rb7S59h43oDMKI7ige/eSdVsDZiVs91mNgYCsWOpoOuVX2CdiJyp2rVSW8Hofu4r2JVFMFB4D6DXgGKh5yI4Sa9NIDRQEwAAbY6c/G0qmEJudtuoWmlAAa58VrQcjTmejd3n51EWiwYvMID2TFYa1xbaKaemi6iF2998UCqBmNn+mem1zHqFpKNIgyVHbOCxsit9ODZBJ7u090VM9mAUcU5Rmg95cJaPjJCfojmkE2kcKGdykB+s2bYp/G+6lb/iVLzQw3jZYXvz7nJvxUMLQacxGHQukT82jhJXkWMYuqVe2koRDcgIAn2GGpWQ2CYh7oJb2p1u/8D1lp+2uXDbixk6UPhd75+KySucJPhjIb5LUdGKHbSvFLp2cClRpWQwnjn4NtmIiPB/Tzb1K0c1tlPKvFowK1cMsEFWaJ1k27BcJOwy91UOsi669ZKkf+iK8pn/shoQn6IuUflGHzsOjjHz+vwLNqxlOIzyo7UJJInU1CAb/8dMY9F7KxZvvB5qFEyr26XKtqzGnbCRXPBdMgQ4u7KUetr+hshmvYIwf9FXJppMPYD+/RZpUfXQgBIlBuV79Hrl3P4= diff --git a/README.rst b/README.rst index 87f8da6..bd7ac6c 100644 --- a/README.rst +++ b/README.rst @@ -1,185 +1,184 @@ Prometheus Proxmox VE Exporter ============================== |Build Status| |Package Version| This is an exporter that exposes information gathered from Proxmox VE node for use by the Prometheus monitoring system. Installation ------------ Note: Python 2 is not supported anymore as of version 2.0.0. Instead use Python 3.6 or better. Using pip: ========== .. code:: shell python3 -m pip install prometheus-pve-exporter Using docker: ============= .. code:: shell docker pull prompve/prometheus-pve-exporter Example: Display usage message: .. code:: shell docker run -it --rm prompve/prometheus-pve-exporter --help Example: Run the image with a mounted configuration file and published port: .. code:: shell docker run --name prometheus-pve-exporter -d -p 127.0.0.1:9221:9221 -v /path/to/pve.yml:/etc/pve.yml prompve/prometheus-pve-exporter Prometheus PVE Exporter will now be reachable at http://localhost:9221/. Usage ----- :: usage: pve_exporter [-h] [--collector.status] [--collector.version] [--collector.node] [--collector.cluster] [--collector.resources] [--collector.config] [config] [port] [address] positional arguments: config Path to configuration file (pve.yml) port Port on which the exporter is listening (9221) address Address to which the exporter will bind optional arguments: -h, --help show this help message and exit --collector.status, --no-collector.status Exposes Node/VM/CT-Status (default: True) --collector.version, --no-collector.version Exposes PVE version info (default: True) --collector.node, --no-collector.node Exposes PVE node info (default: True) --collector.cluster, --no-collector.cluster Exposes PVE cluster info (default: True) --collector.resources, --no-collector.resources Exposes PVE resources info (default: True) --collector.config, --no-collector.config Exposes PVE onboot status (default: True) Use `::` for the `address` argument in order to bind to both IPv6 and IPv4 sockets on dual stacked machines. Visit http://localhost:9221/pve?target=1.2.3.4 where 1.2.3.4 is the IP of the Proxmox VE node to get metrics from. Specify the ``module`` request parameter, to choose which module to use from the config file. The ``target`` request parameter defaults to ``localhost``. Hence if ``pve_exporter`` is deployed directly on the proxmox host, ``target`` can be omitted. Use the `--collector.X` / `--no-collector.X` flags to enable disable selected collectors. Note that that the config collector results in one API call per guest VM/CT. It is therefore recommended to disable this collector using the `--no-collector.config` flag on big deployments. See the wiki_ for more examples and docs. Authentication -------------- Example ``pve.yml`` for password authentication: .. code:: yaml default: user: prometheus@pve password: sEcr3T! Example ``pve.yml`` for `token authentication`_: .. code:: yaml default: user: prometheus@pve token_name: "..." token_value: "..." The configuration is passed directly into `proxmoxer.ProxmoxAPI()`_. Note: When operating PVE with self-signed certificates, then it is necessary to either import the certificate into the local trust store (see this `SE answer`_ for Debian/Ubuntu) or add ``verify_ssl: false`` to the config dict as a sibling to the credentials. Note that PVE `supports Let's Encrypt`_ out ouf the box. In many cases setting up trusted certificates is the better option than operating with self-signed certs. Proxmox VE Configuration ------------------------ For security reasons it is essential to add a user with read-only access (PVEAuditor role) for the purpose of metrics collection. Prometheus Configuration ------------------------ The PVE exporter can be deployed either directly on a Proxmox VE node or onto a separate machine. Example config for PVE exporter running on PVE node: .. code:: yaml scrape_configs: - job_name: 'pve' static_configs: - targets: - 192.168.1.2:9221 # Proxmox VE node with PVE exporter. - 192.168.1.3:9221 # Proxmox VE node with PVE exporter. metrics_path: /pve params: module: [default] Example config for PVE exporter running on Prometheus host: .. code:: yaml scrape_configs: - job_name: 'pve' static_configs: - targets: - 192.168.1.2 # Proxmox VE node. - 192.168.1.3 # Proxmox VE node. metrics_path: /pve params: module: [default] relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 127.0.0.1:9221 # PVE exporter. Grafana Dashboards ------------------ * `Proxmox via Prometheus by Pietro Saccardi`_ - -.. |Build Status| image:: https://travis-ci.com/prometheus-pve/prometheus-pve-exporter.svg?branch=master - :target: https://travis-ci.com/prometheus-pve/prometheus-pve-exporter +.. |Build Status| image:: https://github.com/prometheus-pve/prometheus-pve-exporter/actions/workflows/ci.yml/badge.svg + :target: https://github.com/prometheus-pve/prometheus-pve-exporter/actions/workflows/ci.yml .. |Package Version| image:: https://img.shields.io/pypi/v/prometheus-pve-exporter.svg :target: https://pypi.python.org/pypi/prometheus-pve-exporter .. _wiki: https://github.com/prometheus-pve/prometheus-pve-exporter/wiki .. _`token authentication`: https://pve.proxmox.com/wiki/User_Management#pveum_tokens .. _`proxmoxer.ProxmoxAPI()`: https://pypi.python.org/pypi/proxmoxer .. _`SE answer`: https://askubuntu.com/a/1007236 .. _`supports Let's Encrypt`: https://pve.proxmox.com/pve-docs/pve-admin-guide.html#sysadmin_certificate_management .. _`Proxmox via Prometheus by Pietro Saccardi`: https://grafana.com/dashboards/10347