diff --git a/.github/actions/merge-artifacts/action.yml b/.github/actions/merge-artifacts/action.yml index a213c8fa3..fcf729705 100644 --- a/.github/actions/merge-artifacts/action.yml +++ b/.github/actions/merge-artifacts/action.yml @@ -25,7 +25,7 @@ runs: merge-multiple: true - name: Upload the Regrouped Artifact - uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: ${{ inputs.target_name }} path: | diff --git a/.github/actions/package-delivery/action.yml b/.github/actions/package-delivery/action.yml index 82f641fbe..5da2efcce 100644 --- a/.github/actions/package-delivery/action.yml +++ b/.github/actions/package-delivery/action.yml @@ -77,7 +77,7 @@ runs: - if: ${{ inputs.stability != 'stable' }} name: Restore packages from cache - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.${{ steps.parse-distrib.outputs.package_extension }} key: ${{ inputs.cache_key }} @@ -177,6 +177,11 @@ runs: const path = require('path'); const globber = await glob.create('*.${{ steps.parse-distrib.outputs.package_extension }}'); + let stableRpmSubdirectory = ''; + if ('${{ inputs.stability }}' === 'stable') { + stableRpmSubdirectory = 'RPMS/'; + } + const debTargetProps = '${{ inputs.stability }}' == 'testing' ? '--target-props "release_type=${{ inputs.release_type }}"' : ''; for await (const file of globber.globGenerator()) { @@ -188,7 +193,7 @@ runs: arch = 'x86_64'; } await exec.exec( - `jf rt upload "${fileName}" "${{ steps.get_repository_stability_path.outputs.repository_stability_path }}/${arch}/${{ inputs.module_name }}/" --flat` + `jf rt upload "${fileName}" "${{ steps.get_repository_stability_path.outputs.repository_stability_path }}/${arch}/${stableRpmSubdirectory}${{ inputs.module_name }}/" --flat` ); } else if ('${{ steps.parse-distrib.outputs.package_extension }}' === 'deb') { let arch = 'all'; diff --git a/.github/actions/package-nfpm/action.yml b/.github/actions/package-nfpm/action.yml index 189b5fdd9..e8c23cd1f 100644 --- a/.github/actions/package-nfpm/action.yml +++ b/.github/actions/package-nfpm/action.yml @@ -122,7 +122,7 @@ runs: done shell: bash - - uses: actions/cache/save@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.${{ inputs.package_extension }} key: ${{ inputs.cache_key }} @@ -130,7 +130,7 @@ runs: # Add to your PR the label upload-artifacts to get packages as artifacts - if: ${{ contains(github.event.pull_request.labels.*.name, 'upload-artifacts') }} name: Upload package artifacts - uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-${{ inputs.distrib }} path: ./*.${{ inputs.package_extension}} diff --git a/.github/actions/test-plugins/action.yml b/.github/actions/test-plugins/action.yml index b3cbd5381..bbcf5bfd7 100644 --- a/.github/actions/test-plugins/action.yml +++ b/.github/actions/test-plugins/action.yml @@ -16,7 +16,7 @@ runs: steps: - name: get the cached plugin - uses: actions/cache/restore@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.${{ inputs.package-extension }} key: ${{ inputs.cache-key }} diff --git a/.github/docker/packaging/Dockerfile.packaging-plugins-alma8 b/.github/docker/packaging/Dockerfile.packaging-plugins-alma8 index e9fe67b49..620a7b3cc 100644 --- a/.github/docker/packaging/Dockerfile.packaging-plugins-alma8 +++ b/.github/docker/packaging/Dockerfile.packaging-plugins-alma8 @@ -10,10 +10,22 @@ baseurl=https://repo.goreleaser.com/yum/ enabled=1 gpgcheck=0' | tee /etc/yum.repos.d/goreleaser.repo -dnf -y install gcc git gettext rpm-build dos2unix python3 epel-release nfpm-2.41.0 openssl-devel jq zstd selinux-policy-devel +dnf -y install gcc git gettext rpm-build dos2unix python3 epel-release nfpm-2.41.0 openssl-devel jq zstd selinux-policy-devel yum-utils +dnf config-manager --set-enabled powertools dnf -y install perl-App-cpanminus perl-JSON cpanm App::FatPacker cpanm File::Copy::Recursive + +# For cpan libs +dnf install -y cpio libcurl-devel libssh-devel expat-devel libuuid-devel zeromq-devel libxml2-devel libffi-devel perl-DBI perl-Net-Pcap freetds freetds-devel perl-Module-Build-Tiny +cpanm Module::Build::Tiny +cpanm Module::Install +# Install fpm (ruby 3 is required) +dnf module reset -y ruby +dnf module enable -y ruby:3.1 +dnf install -y ruby ruby-devel +gem install fpm + dnf clean all EOF diff --git a/.github/docker/packaging/Dockerfile.packaging-plugins-alma9 b/.github/docker/packaging/Dockerfile.packaging-plugins-alma9 index 23bd219eb..a3086c818 100644 --- a/.github/docker/packaging/Dockerfile.packaging-plugins-alma9 +++ b/.github/docker/packaging/Dockerfile.packaging-plugins-alma9 @@ -10,10 +10,22 @@ baseurl=https://repo.goreleaser.com/yum/ enabled=1 gpgcheck=0' | tee /etc/yum.repos.d/goreleaser.repo -dnf -y install gcc git gettext rpm-build dos2unix python3 epel-release nfpm-2.41.0 openssl-devel jq zstd selinux-policy-devel +dnf -y install gcc git gettext rpm-build dos2unix python3 epel-release nfpm-2.41.0 openssl-devel jq zstd selinux-policy-devel yum-utils +dnf config-manager --set-enabled crb dnf -y install perl-App-cpanminus perl-JSON cpanm App::FatPacker cpanm File::Copy::Recursive + +# For cpan libs +dnf install -y cpio libcurl-devel libssh-devel expat-devel libuuid-devel zeromq-devel libxml2-devel libffi-devel perl-DBI perl-Net-Pcap freetds freetds-devel perl-Module-Build-Tiny +cpanm Module::Build::Tiny +cpanm Module::Install +# Install fpm (ruby 3 is required) +dnf module reset -y ruby +dnf module enable -y ruby:3.1 +dnf install -y ruby ruby-devel +gem install fpm + dnf clean all EOF diff --git a/.github/docker/packaging/Dockerfile.packaging-plugins-bookworm b/.github/docker/packaging/Dockerfile.packaging-plugins-bookworm index 9b7f90b07..93a612729 100644 --- a/.github/docker/packaging/Dockerfile.packaging-plugins-bookworm +++ b/.github/docker/packaging/Dockerfile.packaging-plugins-bookworm @@ -55,6 +55,8 @@ apt-get install -y \ cpanm Module::Build::Tiny cpanm Module::Install +cpanm Crypt::OpenSSL::Guess + gem install fpm echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list @@ -64,3 +66,7 @@ apt-get install -y nfpm=2.41.0 apt-get clean EOF + +COPY .github/patch/fpm-deb.rb.diff /tmp/fpm-deb.rb.diff +# Patch to apply fpm fix for debian package generation while waiting for the official fix to be released (https://github.com/jordansissel/fpm/pull/1947). +RUN patch -i /tmp/fpm-deb.rb.diff $(find / -type f -name "deb.rb") && /bin/rm -rf /tmp/fpm-deb.rb.diff diff --git a/.github/docker/packaging/Dockerfile.packaging-plugins-bullseye b/.github/docker/packaging/Dockerfile.packaging-plugins-bullseye index 39881c897..1c02a49cc 100644 --- a/.github/docker/packaging/Dockerfile.packaging-plugins-bullseye +++ b/.github/docker/packaging/Dockerfile.packaging-plugins-bullseye @@ -38,7 +38,6 @@ apt-get install -y \ libapp-fatpacker-perl \ libcurl4-openssl-dev \ libczmq-dev \ - libczmq-dev\ libfile-copy-recursive-perl \ libjson-perl \ libmodule-build-tiny-perl \ @@ -58,7 +57,6 @@ cpanm Crypt::OpenSSL::Guess gem install fpm - echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list apt-get update apt-get install -y nfpm=2.41.0 @@ -66,3 +64,7 @@ apt-get install -y nfpm=2.41.0 apt-get clean EOF + +COPY .github/patch/fpm-deb.rb.diff /tmp/fpm-deb.rb.diff +# Patch to apply fpm fix for debian package generation while waiting for the official fix to be released (https://github.com/jordansissel/fpm/pull/1947). +RUN patch -i /tmp/fpm-deb.rb.diff $(find / -type f -name "deb.rb") && /bin/rm -rf /tmp/fpm-deb.rb.diff diff --git a/.github/docker/packaging/Dockerfile.packaging-plugins-jammy b/.github/docker/packaging/Dockerfile.packaging-plugins-jammy index ddd4f993b..96109a27a 100644 --- a/.github/docker/packaging/Dockerfile.packaging-plugins-jammy +++ b/.github/docker/packaging/Dockerfile.packaging-plugins-jammy @@ -66,3 +66,7 @@ apt-get install -y nfpm=2.41.0 apt-get clean EOF + +COPY .github/patch/fpm-deb.rb.diff /tmp/fpm-deb.rb.diff +# Patch to apply fpm fix for debian package generation while waiting for the official fix to be released (https://github.com/jordansissel/fpm/pull/1947). +RUN patch -i /tmp/fpm-deb.rb.diff $(find / -type f -name "deb.rb") && /bin/rm -rf /tmp/fpm-deb.rb.diff diff --git a/.github/workflows/as400.yml b/.github/workflows/as400.yml index 098b834d4..7c0f4dd80 100644 --- a/.github/workflows/as400.yml +++ b/.github/workflows/as400.yml @@ -102,7 +102,7 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} - name: Save to cache - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.${{ matrix.package_extension }} key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }} diff --git a/.github/workflows/check-status.yml b/.github/workflows/check-status.yml new file mode 100644 index 000000000..0e9b9db95 --- /dev/null +++ b/.github/workflows/check-status.yml @@ -0,0 +1,180 @@ +name: check-status + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +on: + pull_request: + branches: + - develop + - master + - hotfix-* + - release-* + +jobs: + check-status: + runs-on: ubuntu-24.04 + steps: + - name: Check workflow statuses and display token usage + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "current rest api rate usage:" + curl -s -H "Accept: application/vnd.github+json" -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/rate_limit | jq .rate + echo "" + echo "" + echo "current graphql rate usage:" + curl -s -H "Accept: application/vnd.github+json" -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/rate_limit | jq .resources.graphql + echo "" + echo "" + + - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.number }} + with: + script: | + await exec.exec("sleep 20s"); + + for (let i = 0; i < 120; i++) { + const failure = []; + const cancelled = []; + const pending = []; + + const result = await github.rest.checks.listSuitesForRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: "${{ github.head_ref }}" + }); + result.data.check_suites.forEach(({ app: { slug }, conclusion, id}) => { + if (slug === 'github-actions') { + if (conclusion === 'failure' || conclusion === 'cancelled') { + failure.push(id); + } else if (conclusion === null) { + pending.push(id); + } + console.log(`check suite ${id} => ${conclusion === null ? 'pending' : conclusion}`); + } + }); + + if (pending.length === 0) { + core.setFailed("Cannot get pull request check status"); + return; + } + + if (failure.length > 0) { + let failureMessage = ''; + const failedCheckRuns = []; + for await (const suite_id of failure) { + const resultCheckRuns = await github.rest.checks.listForSuite({ + owner: context.repo.owner, + repo: context.repo.repo, + check_suite_id: suite_id + }); + + resultCheckRuns.data.check_runs.forEach(({ conclusion, name, html_url }) => { + if (conclusion === 'failure' || conclusion === 'cancelled') { + failedCheckRuns.push(`${name} (${conclusion})`); + } + }); + } + + core.summary.addRaw(`${failedCheckRuns.length} job(s) failed:`, true) + core.summary.addList(failedCheckRuns); + core.summary.write() + + if (failedCheckRuns.length > 0) { + core.setFailed(`${failedCheckRuns.length} job(s) failed`); + return; + } + } + + if (pending.length === 1) { + core.info("All workflows are ok"); + return; + } + + core.info(`${pending.length} workflows in progress`); + + await exec.exec("sleep 30s"); + } + + core.setFailed("Timeout: some jobs are still in progress"); + + get-environment: + if: | + contains(fromJSON('["pull_request", "pull_request_target"]') , github.event_name) && + (startsWith(github.base_ref, 'release-') || startsWith(github.base_ref, 'hotfix-')) + uses: ./.github/workflows/get-environment.yml + + check-cherry-pick: + needs: [get-environment, check-status] + runs-on: ubuntu-24.04 + if: | + contains(fromJSON('["pull_request", "pull_request_target"]') , github.event_name) && + needs.get-environment.outputs.target_stability == 'testing' && + ! contains(needs.get-environment.outputs.labels, 'skip-cherry-pick') + + steps: + - name: Check if the PR is a cherry-pick from dev branch + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + env: + LINKED_DEV_BRANCH: develop + with: + script: | + let linkedPrs = []; + let errorMessage = `This pull request is not a cherry-pick from ${process.env.LINKED_DEV_BRANCH} or has no reference to a pull request which has been merged on ${process.env.LINKED_DEV_BRANCH}\n`; + + try { + const pull = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number + }); + + const { title, body } = pull.data; + + [title, body].forEach((text) => { + const linkedPrMatches = text.matchAll(/(?:#|\/pull\/)(\d+)/g); + if (linkedPrMatches) { + [...linkedPrMatches].forEach((match) => { + linkedPrs.push(Number(match[1])); + }); + } + }); + + // remove duplicates + linkedPrs = [...new Set(linkedPrs)]; + console.log(`Linked pull requests found in PR title and body: ${linkedPrs.join(', ')}`); + } catch (e) { + throw new Error(`Failed to get information of pull request #${context.issue.number}: ${e}`); + } + + for await (const prNumber of linkedPrs) { + try { + const pull = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: prNumber + }); + + if (pull.data.base.ref === process.env.LINKED_DEV_BRANCH) { + if (pull.data.state === 'closed' && pull.data.merged === true) { + console.log(`This pull request is a cherry-pick from pull request #${prNumber} on ${process.env.LINKED_DEV_BRANCH}`); + return; + } else { + errorMessage += `This pull request seems to be a cherry-pick from pull request #${prNumber} on ${process.env.LINKED_DEV_BRANCH} but it is not merged yet\n`; + } + } else { + errorMessage += `Pull request #${prNumber} is linked to ${pull.data.base.ref} instead of ${process.env.LINKED_DEV_BRANCH}\n`; + } + } catch (e) { + errorMessage += `Failed to get information on pull request #${prNumber}: ${e}\n`; + } + } + + errorMessage += `\nIf you are sure this PR does not need to be a cherry-pick from ${process.env.LINKED_DEV_BRANCH} or must be merged urgently, `; + errorMessage += `open the pull request on ${process.env.LINKED_DEV_BRANCH} and add label "skip-cherry-pick" to the PR and re-run all jobs of workflow check-status\n`; + + throw new Error(errorMessage); diff --git a/.github/workflows/connector-vmware.yml b/.github/workflows/connector-vmware.yml index 3e42dc8c6..eb74274bb 100644 --- a/.github/workflows/connector-vmware.yml +++ b/.github/workflows/connector-vmware.yml @@ -77,7 +77,7 @@ jobs: stability: ${{ needs.get-environment.outputs.stability }} - name: Upload apt/dnf packages as artifacts if asked if: ${{ contains(github.event.pull_request.labels.*.name, 'upload-artifacts') }} - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: vmware-connector-daemon-${{ matrix.distrib }} path: centreon-plugin* diff --git a/.github/workflows/docker-builder-packaging-plugins.yml b/.github/workflows/docker-builder-packaging-plugins.yml index 4ad9c1b1f..d034ac64c 100644 --- a/.github/workflows/docker-builder-packaging-plugins.yml +++ b/.github/workflows/docker-builder-packaging-plugins.yml @@ -84,9 +84,9 @@ jobs: username: ${{ secrets.HARBOR_CENTREON_PUSH_USERNAME }} password: ${{ secrets.HARBOR_CENTREON_PUSH_TOKEN }} - - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 + - uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0 - - uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0 + - uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0 with: file: .github/docker/packaging/Dockerfile.${{ matrix.dockerfile }} context: . diff --git a/.github/workflows/docker-builder-testing-plugins.yml b/.github/workflows/docker-builder-testing-plugins.yml index 2872c99db..57e871d37 100644 --- a/.github/workflows/docker-builder-testing-plugins.yml +++ b/.github/workflows/docker-builder-testing-plugins.yml @@ -69,9 +69,9 @@ jobs: username: ${{ secrets.HARBOR_CENTREON_PUSH_USERNAME }} password: ${{ secrets.HARBOR_CENTREON_PUSH_TOKEN }} - - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 + - uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0 - - uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0 + - uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0 with: file: .github/docker/testing/Dockerfile.testing-plugins-${{ matrix.dockerfile }} context: . diff --git a/.github/workflows/docker-builder-unit-tests.yml b/.github/workflows/docker-builder-unit-tests.yml index 184f2b726..a0ea6a7ae 100644 --- a/.github/workflows/docker-builder-unit-tests.yml +++ b/.github/workflows/docker-builder-unit-tests.yml @@ -69,9 +69,9 @@ jobs: username: ${{ secrets.HARBOR_CENTREON_PUSH_USERNAME }} password: ${{ secrets.HARBOR_CENTREON_PUSH_TOKEN }} - - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 + - uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0 - - uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0 + - uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0 with: file: .github/docker/unit-tests/Dockerfile.unit-tests-${{ matrix.dockerfile }} context: . diff --git a/.github/workflows/get-environment.yml b/.github/workflows/get-environment.yml index 14c1eba61..c17f43179 100644 --- a/.github/workflows/get-environment.yml +++ b/.github/workflows/get-environment.yml @@ -26,6 +26,9 @@ on: skip_workflow: description: "if the current workflow should be skipped" value: ${{ jobs.get-environment.outputs.skip_workflow }} + labels: + description: "list of labels on the PR" + value: ${{ jobs.get-environment.outputs.labels }} jobs: get-environment: @@ -38,6 +41,7 @@ jobs: release_type: ${{ steps.get_release_type.outputs.release_type }} is_targeting_feature_branch: ${{ steps.get_stability.outputs.is_targeting_feature_branch }} skip_workflow: ${{ steps.skip_workflow.outputs.result }} + labels: ${{ steps.has_skip_label.outputs.labels }} steps: - name: Check if PR has skip label @@ -46,14 +50,17 @@ jobs: with: script: | let hasSkipLabel = false; + let labels = []; + if (${{ contains(fromJSON('["pull_request", "pull_request_target"]') , github.event_name) }} === true) { try { - const labels = await github.rest.issues.listLabelsOnIssue({ + const fetchedLabels = await github.rest.issues.listLabelsOnIssue({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number }); - labels.data.forEach(({ name }) => { + fetchedLabels.data.forEach(({ name }) => { + labels.push(name); if (name === '${{ format('skip-workflow-{0}', github.workflow) }}') { hasSkipLabel = true; } @@ -62,6 +69,9 @@ jobs: core.warning(`failed to list labels: ${e}`); } } + + core.setOutput('labels', labels); + return hasSkipLabel; - name: Checkout sources (current branch) @@ -236,24 +246,43 @@ jobs: - name: Get version id: get_version - run: | - if [[ "${{ inputs.version_file }}" == "" ]]; then - VERSION=$(date '+%Y%m%d') - elif [[ "${{ inputs.version_file }}" == */*.yaml ]]; then - VERSION=$(grep 'version: ' ${{ inputs.version_file }} | cut -d' ' -f2 | tr -d '"') - else - VERSION=$(grep VERSION ${{ inputs.version_file }} | cut -d "'" -f 2) - fi - echo "version=$(echo $VERSION)" >> $GITHUB_OUTPUT - shell: bash + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + let version = ''; - - name: "Get release: 1 for testing / stable, . for others" + if ('${{ steps.get_stability.outputs.stability }}' === 'testing') { + const branchName = "${{ github.head_ref || github.ref_name }}"; + const matches = branchName.match(/^(?:release|hotfix)-(\d{8})$/); + if (matches) { + version = matches[1]; + } else { + throw new Error('invalid version'); + } + } else if ('${{ steps.get_stability.outputs.stability }}' === 'unstable') { + const currentDate = new Date(); + version = `${currentDate.getFullYear()}${("0" + (currentDate.getMonth() + 1)).slice(-2)}${String(currentDate.getDate()).padStart(2, '0')}`; + } else { + const currentDate = new Date(); + version = `${currentDate.getFullYear()}${("0" + (currentDate.getMonth() + 1)).slice(-2)}00`; + } + + core.setOutput('version', version); + + - name: "Get release: 1 for testing / stable, for others" id: get_release - run: | - RELEASE=$(date '+%H%M%S') + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + let release = ''; - echo "release=$RELEASE" >> $GITHUB_OUTPUT - shell: bash + if (${{ contains(fromJSON('["testing", "unstable"]') , steps.get_stability.outputs.stability) }} === true) { + release = "1" + } else { + release = Date.now() + } + + core.setOutput('release', release); - name: "Get release type: hotfix, release or not defined if not a release" id: get_release_type @@ -276,7 +305,8 @@ jobs: ['release_type', '${{ steps.get_release_type.outputs.release_type || 'not defined because this is not a release' }}'], ['is_targeting_feature_branch', '${{ steps.get_stability.outputs.is_targeting_feature_branch }}'], ['target_stability', '${{ steps.get_stability.outputs.target_stability || 'not defined because current run is not triggered by pull request event' }}'], - ['skip_workflow', '${{ steps.skip_workflow.outputs.result }}'] + ['skip_workflow', '${{ steps.skip_workflow.outputs.result }}'], + ['labels', '${{ steps.has_skip_label.outputs.labels }}'], ]; core.summary .addHeading(`${context.workflow} environment outputs`) diff --git a/.github/workflows/perl-cpan-libraries.yml b/.github/workflows/perl-cpan-libraries.yml index 988cc04cf..be2f2abf3 100644 --- a/.github/workflows/perl-cpan-libraries.yml +++ b/.github/workflows/perl-cpan-libraries.yml @@ -92,6 +92,7 @@ jobs: - rpm_provides: "" - version: "" - spec_file: "" + - no-auto-depends: false - distrib: el8 package_extension: rpm image: packaging-plugins-alma8 @@ -112,6 +113,10 @@ jobs: rpm_provides: "perl(FFI::Platypus::Buffer) perl(FFI::Platypus::Memory)" rpm_dependencies: "perl(Capture::Tiny) perl(FFI::CheckLib) perl(File::Spec::Functions) perl(IPC::Cmd) perl(JSON::PP) perl(List::Util) perl(autodie) perl(constant) perl(parent)" no-auto-depends: true + - name: "Mojo::IOLoop::Signal" + rpm_dependencies: "perl-Mojolicious" + rpm_provides: "perl(Mojo::IOLoop::Signal)" + no-auto-depends: true - name: "Net::DHCP" rpm_provides: "perl(Net::DHCP::Constants) perl(Net::DHCP::Packet)" - name: "Net::SMTPS" @@ -131,11 +136,6 @@ jobs: - name: "ZMQ::LibZMQ4" version: "0.01" rpm_dependencies: "zeromq" - - name: "Mojo::IOLoop::Signal" - rpm_dependencies: "perl-Mojolicious" - rpm_provides: "perl(Mojo::IOLoop::Signal)" - no-auto-depends: true - name: package ${{ matrix.distrib }} ${{ matrix.name }} container: @@ -149,35 +149,25 @@ jobs: uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} + name: Check if package already exists + id: check-package-existence run: | - yum install -y yum-utils epel-release git - yum config-manager --set-enabled crb || true # alma 9 - yum config-manager --set-enabled powertools || true # alma 8 - yum install -y cpanminus rpm-build libcurl-devel libssh-devel expat-devel gcc libuuid-devel zeromq-devel libxml2-devel libffi-devel perl-DBI perl-Net-Pcap freetds freetds-devel perl-Module-Build-Tiny - - dnf module reset -y ruby - dnf module enable -y ruby:3.1 - dnf install -y ruby ruby-devel + package_info=$(dnf provides 'perl(${{ matrix.name }})' 2>&1 | tr '[:upper:]' '[:lower:]' || true) + do_not_build="false" + if [[ ! $package_info =~ "no matches found" ]]; then + package_version=$(echo $package_info | grep -oP 'perl\(${{ matrix.name }}\) = \K[0-9]+\.[0-9]+') + if [[ -z "${{ matrix.version }}" || "$package_version" == "${{ matrix.version }}" ]]; then + echo "::warning::Package ${{ matrix.name }} already exists in the official ${{ matrix.distrib }} repository with the same version." + do_not_build="true" + else + echo "::warning::Package ${{ matrix.name }} exists in the official ${{ matrix.distrib }} repository with a different version." + do_not_build="false" + fi + fi + echo "do_not_build=$do_not_build" >> $GITHUB_OUTPUT shell: bash - - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - with: - repository: kduret/fpm - ref: fix-rpm-perl-dependency-name-unchanged - path: fpm - - - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} - name: Build and install fpm # waiting https://github.com/jordansissel/fpm/pull/2066 - run: | - dnf install -y bsdtar - cd fpm - gem install bundler - bundle install - make install - shell: bash - - - if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file == '' }} + - if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file == '' }} run: | if [ -z "${{ matrix.version }}" ]; then PACKAGE_VERSION="" @@ -205,15 +195,20 @@ jobs: done fi - cpanm Module::Build::Tiny - cpanm Module::Install - export SYBASE="/usr" - fpm -s cpan -t ${{ matrix.package_extension }} --rpm-dist ${{ matrix.distrib }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES$PACKAGE_PROVIDES$PACKAGE_VERSION ${{ matrix.name }} + temp_file=$(mktemp) + created_package=$(fpm -s cpan -t ${{ matrix.package_extension }} --rpm-dist ${{ matrix.distrib }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES$PACKAGE_PROVIDES$PACKAGE_VERSION ${{ matrix.name }} | tee "$temp_file" | grep "Created package" | grep -oP '(?<=:path=>").*?(?=")') + # Check package name + if [ -z "$created_package" ]; then + echo "Error: fpm command failed" + exit 1 + fi + # Check rpm + rpm2cpio $created_package | cpio -t shell: bash - - if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file != '' }} + - if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file != '' }} run: | mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} @@ -222,7 +217,7 @@ jobs: cp -r ~/rpmbuild/RPMS/noarch/*.rpm . shell: bash - - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} + - if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_distribs, matrix.distrib) }} name: Replace '::' with - in the feature path id: package-name run: | @@ -232,8 +227,8 @@ jobs: echo "name_with_dash=$name_with_dash" >> $GITHUB_OUTPUT shell: bash - - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + - if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_distribs, matrix.distrib) }} + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-${{ matrix.package_extension }}-${{ matrix.distrib }}-${{ steps.package-name.outputs.name_with_dash }} path: ./*.${{ matrix.package_extension }} @@ -251,7 +246,7 @@ jobs: steps: - name: Merge Artifacts - uses: actions/upload-artifact/merge@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact/merge@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-rpm-${{ matrix.distrib }} pattern: packages-rpm-${{ matrix.distrib }}-* @@ -299,7 +294,7 @@ jobs: - run: rpmsign --addsign ./*.rpm shell: bash - - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.rpm key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} @@ -318,7 +313,6 @@ jobs: name: [ "ARGV::Struct", - "Authen::SCRAM::Client", "Config::AWS", "Convert::EBCDIC", "Crypt::Blowfish_PP", @@ -338,42 +332,51 @@ jobs: "Net::FTPSSL", "Net::HTTPTunnel", "Net::MQTT::Simple", - "Net::SMTP_auth", "Paws", "Statistics::Regression", - "WWW::Selenium", + "XS::Loader", "ZMQ::Constants", "ZMQ::LibZMQ4" ] include: - runner_name: ubuntu-24.04 - arch: amd64 - - build_distribs: "bullseye,bookworm,jammy" + - build_names: "bullseye-amd64,bookworm,jammy" - deb_dependencies: "" - rpm_provides: "" - version: "" - use_dh_make_perl: "true" - - spec_file: "" - - distrib: bullseye + - build_name: bullseye-amd64 + distrib: bullseye package_extension: deb image: packaging-plugins-bullseye - - distrib: bookworm + - build_name: bookworm + distrib: bookworm package_extension: deb image: packaging-plugins-bookworm - - distrib: jammy + - build_name: jammy + distrib: jammy package_extension: deb image: packaging-plugins-jammy - - distrib: bullseye + - build_name: bullseye-arm64 + distrib: bullseye package_extension: deb image: packaging-plugins-bullseye-arm64 arch: arm64 runner_name: ["self-hosted", "collect-arm64"] + - name: "Crypt::OpenSSL::AES" + use_dh_make_perl: "false" + deb_dependencies: "libexporter-tiny-perl libxs-install-perl" + no-auto-depends: true + build_names: "bullseye-amd64,bookworm,jammy,bullseye-arm64" - name: "Device::Modbus::RTU::Client" - build_distribs: "bookworm" + build_names: "bookworm" - name: "Device::Modbus::TCP::Client" - build_distribs: "bookworm" + build_names: "bookworm" + - name: "Digest::SHA1" + build_names: "jammy" - name: "Net::Amazon::Signature::V4" - build_distribs: ["bullseye", "jammy"] + build_names: ["bullseye-amd64", "jammy"] - name: "Net::MQTT::Simple" version: "1.29" - name: "Paws" @@ -381,12 +384,13 @@ jobs: deb_dependencies: "libmoose-perl libmoosex-classattribute-perl libjson-maybexs-perl liburl-encode-perl libargv-struct-perl libmoo-perl libtype-tiny-perl libdatastruct-flat-perl libmodule-find-perl libthrowable-perl liburi-template-perl libnet-amazon-signature-v4-perl" no-auto-depends: true - name: "Statistics::Regression" - build_distribs: "bullseye" + build_names: "bullseye-amd64" version: "0.53" - name: "ZMQ::LibZMQ4" use_dh_make_perl: "false" version: "0.01" deb_dependencies: "libzmq5" + build_names: "bullseye-amd64,bookworm,jammy,bullseye-arm64" name: package ${{ matrix.distrib }} ${{ matrix.arch }} ${{ matrix.name }} container: image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest @@ -395,43 +399,62 @@ jobs: password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }} steps: - - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} + - if: ${{ contains(matrix.build_names, matrix.build_name) }} uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} + - if: ${{ contains(matrix.build_names, matrix.build_name) }} name: Parse distrib name id: parse-distrib uses: ./.github/actions/parse-distrib with: distrib: ${{ matrix.distrib }} - - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} - name: Get package version - id: package-version + - if: ${{ contains(matrix.build_names, matrix.build_name) }} + name: Get package infos + id: package-infos run: | apt-get update - apt-get install -y cpanminus - + cpan_info=$(cpanm --info ${{ matrix.name }}) if [ -z "${{ matrix.version }}" ]; then - CPAN_PACKAGE_VERSION=$(cpanm --info ${{ matrix.name }} | sed 's/\.tar\.gz$//' | sed 's/.*\-//' | sed 's/v//') - + CPAN_PACKAGE_VERSION=$(echo $cpan_info | sed 's/\.tar\.gz$//' | sed 's/.*\-//' | sed 's/v//') if [[ ! $CPAN_PACKAGE_VERSION =~ ^[0-9]+\.[0-9]+ ]]; then echo "::error::Invalid version number: ${CPAN_PACKAGE_VERSION}" exit 1 fi - PACKAGE_VERSION="${CPAN_PACKAGE_VERSION}" else PACKAGE_VERSION="${{ matrix.version }}" fi - echo "package_version=$(echo $PACKAGE_VERSION)" >> $GITHUB_OUTPUT + CPAN_PACKAGE_NAME=$(echo $cpan_info | sed 's/.*\///g' | sed 's/-[0-9\.]*\.tar\.gz//g' | tr '[:upper:]' '[:lower:]') + PACKAGE_NAME="lib$CPAN_PACKAGE_NAME-perl" + echo "package_name=$(echo $PACKAGE_NAME)" >> $GITHUB_OUTPUT shell: bash - - if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.use_dh_make_perl == 'false' }} + - if: ${{ contains(matrix.build_names, matrix.build_name) }} + name: Check if package already exists + id: check-package-existence run: | - apt-get install -y ruby libcurl4-openssl-dev libssh-dev uuid-dev libczmq-dev + package_info=$(apt-cache policy ${{ steps.package-infos.outputs.package_name }}) + if [[ -n $package_info && "${{ steps.package-infos.outputs.package_name }}" =~ "_" ]]; then + package_info=$(apt-cache policy $(echo ${{ steps.package-infos.outputs.package_name }} | sed 's/_//g')) + fi + do_not_build="false" + if [[ -n $package_info ]]; then + candidate_version=$(echo "$package_info" | grep 'Candidate:' | awk '{print $2}') + if [[ "$candidate_version" == "${{ steps.package-infos.outputs.package_version }}"* ]]; then + echo "::warning::Package ${{ steps.package-infos.outputs.package_name }} already exists in the official ${{ matrix.distrib }} repository with the same version." + do_not_build="true" + else + echo "::warning::Package ${{ steps.package-infos.outputs.package_name }} exists in the official ${{ matrix.distrib }} repository with a different version." + do_not_build="false" + fi + fi + echo "do_not_build=$do_not_build" >> $GITHUB_OUTPUT + shell: bash + - if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_names, matrix.build_name) && matrix.use_dh_make_perl == 'false' }} + run: | if [ -z "${{ matrix.deb_dependencies }}" ]; then PACKAGE_DEPENDENCIES="" else @@ -439,30 +462,35 @@ jobs: PACKAGE_DEPENDENCIES="$PACKAGE_DEPENDENCIES --depends $PACKAGE_DEPENDENCY" done fi - if [ ! -z "${{ matrix.no-auto-depends }}" ]; then PACKAGE_DEPENDENCIES="$PACKAGE_DEPENDENCIES --no-auto-depends" fi - cpanm Module::Build::Tiny - cpanm Module::Install - - gem install fpm - # Patch to apply fpm fix for debian package generation while waiting for the official fix to be released. - patch -i .github/patch/fpm-deb.rb.diff $(find / -type f -name "deb.rb") - - fpm -a native -s cpan -t ${{ matrix.package_extension }} --deb-dist ${{ matrix.distrib }} --iteration ${{ steps.parse-distrib.outputs.package_distrib_name }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES -v ${{ steps.package-version.outputs.package_version }} ${{ matrix.name }} + temp_file=$(mktemp) + created_package=$(fpm -s cpan -t ${{ matrix.package_extension }} --deb-dist ${{ matrix.distrib }} --iteration ${{ steps.parse-distrib.outputs.package_distrib_name }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES -v ${{ steps.package-infos.outputs.package_version }} ${{ matrix.name }} | tee "$temp_file" | grep "Created package" | grep -oP '(?<=:path=>").*?(?=")') || { echo "Error: fpm command failed"; exit 1; } + # Check package name + if [ -z "$created_package" ]; then + echo "Error: fpm command failed" + exit 1 + fi + # Check deb + dpkg-deb --contents $created_package || { echo "Error: dpkg-deb failed for package $created_package"; exit 1; } shell: bash - - if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.use_dh_make_perl == 'true' }} + - if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_names, matrix.build_name) && matrix.use_dh_make_perl == 'true' }} run: | - apt-get install -y libcurl4-openssl-dev dh-make-perl libssh-dev uuid-dev libczmq-dev libmodule-install-perl libmodule-build-tiny-perl - # module-build-tiny is required for Mojo::IOLoop::Signal build. - - DEB_BUILD_OPTIONS="nocheck nodocs notest" dh-make-perl make --dist ${{ matrix.distrib }} --build --version ${{ steps.package-version.outputs.package_version }}${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }} --cpan ${{ matrix.name }} + temp_file=$(mktemp) + created_package=$(DEB_BUILD_OPTIONS="nocheck nodocs notest" dh-make-perl make --dist ${{ matrix.distrib }} --build --version ${{ steps.package-infos.outputs.package_version }}${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }} --cpan ${{ matrix.name }} | tee "$temp_file" | grep "building package" | grep -oP "(?<=in '..\/).*.deb(?=')") || { echo "Error: dh-make-perl command failed"; exit 1; } + # Check package name + if [ -z "$created_package" ]; then + echo "Error: fpm command failed" + exit 1 + fi + # Check deb + dpkg-deb --contents $created_package || { echo "Error: dpkg-deb failed for package $created_package"; exit 1; } shell: bash - - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} + - if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_names, matrix.build_name) }} name: Replace '::' with - in the feature path id: package-name run: | @@ -472,8 +500,8 @@ jobs: echo "name_with_dash=$name_with_dash" >> $GITHUB_OUTPUT shell: bash - - if: ${{ contains(matrix.build_distribs, matrix.distrib) }} - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + - if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_names, matrix.build_name) }} + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-${{ matrix.package_extension }}-${{ matrix.distrib }}-${{ matrix.arch }}-${{ steps.package-name.outputs.name_with_dash}} path: ./*.${{ matrix.package_extension }} @@ -491,7 +519,7 @@ jobs: steps: - name: Merge Artifacts - uses: actions/upload-artifact/merge@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact/merge@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-deb-${{ matrix.distrib }} pattern: packages-deb-${{ matrix.distrib }}-* @@ -519,13 +547,172 @@ jobs: name: packages-deb-${{ matrix.distrib }} path: ./ - - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.deb key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }} - deliver-packages: + test-packages: needs: [get-environment, sign-rpm, download-and-cache-deb] + strategy: + fail-fast: false + matrix: + include: + - package_extension: rpm + image: almalinux:8 + distrib: el8 + arch: amd64 + runner_name: ubuntu-24.04 + - package_extension: rpm + image: almalinux:9 + distrib: el9 + arch: amd64 + runner_name: ubuntu-24.04 + - package_extension: deb + image: debian:bullseye + distrib: bullseye + arch: amd64 + runner_name: ubuntu-24.04 + - package_extension: deb + image: debian:bookworm + distrib: bookworm + arch: amd64 + runner_name: ubuntu-24.04 + - package_extension: deb + image: ubuntu:jammy + distrib: jammy + arch: amd64 + runner_name: ubuntu-24.04 + - package_extension: deb + image: debian:bullseye + distrib: bullseye + arch: arm64 + runner_name: ["self-hosted", "collect-arm64"] + + runs-on: ${{ matrix.runner_name }} + container: + image: ${{ matrix.image }} + + name: Test perl CPAN libs packages on ${{ matrix.package_extension }} ${{ matrix.distrib }} ${{ matrix.arch }} + steps: + - if: ${{ matrix.package_extension == 'rpm' }} + name: Install zstd, perl and Centreon repositories + run: | + dnf install -y zstd perl epel-release 'dnf-command(config-manager)' + dnf config-manager --set-enabled powertools || true # alma 8 + dnf config-manager --set-enabled crb || true # alma 9 + # Import Centreon GPG key + GPG_KEY_URL="https://yum-gpg.centreon.com/RPM-GPG-KEY-CES" + curl -sSL $GPG_KEY_URL -o RPM-GPG-KEY-CES + rpm --import RPM-GPG-KEY-CES + shell: bash + + - if: ${{ matrix.package_extension == 'deb' }} + name: Install zstd, perl and Centreon repositories + run: | + export DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get install -y zstd perl wget gpg apt-utils procps + wget -O- https://apt-key.centreon.com | gpg --dearmor | tee /etc/apt/trusted.gpg.d/centreon.gpg > /dev/null 2>&1 + # Avoid apt to clean packages cache directory + rm -f /etc/apt/apt.conf.d/docker-clean + apt-get update + shell: bash + + - name: Restore packages from cache + uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + with: + path: ./*.${{ matrix.package_extension }} + key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }} + fail-on-cache-miss: true + + - if: ${{ matrix.package_extension == 'rpm' }} + name: Install packages + run: | + error_log="install_error_${{ matrix.distrib }}_${{ matrix.arch }}.log" + for package in ./*.rpm; do + echo "Installing package: $package" + # List dependencies, and remove version and comparison operators + dependencies=$(rpm -qpR $package | sed 's/ [0-9.-]*\(\s\|$\)/ /g' | sed 's/ [<>!=]*\(\s\|$\)/ /g') + for dependency in $dependencies; do + # Skip non-perl dependencies + if [[ $dependency != perl* ]]; then + continue + else + echo "Check dependency: $dependency" + # Update the dependency name to match the package name + dependency=$(echo $dependency | sed 's/(/-/g' | sed 's/)//g' | sed 's/::/-/g') + fi + # If the dependency has been built in the same workflow, install it + if [[ -n $(find . -maxdepth 1 -regex "\.\/$dependency-[0-9v].*\.rpm") ]]; then + echo "Installing dependency: $dependency" + error_output=$(dnf install -y ./$dependency*.rpm 2>&1) || { echo "$error_output" >> $error_log; echo "Error during installation of the dependency $dependency" >> $error_log; true; } + fi + done + # Install package, then uninstall it with all his dependencies + echo "Package installation..." + error_output=$(dnf install -y $package 2>&1) || { echo "$error_output" >> $error_log; echo "Error during installation of the package $package" >> $error_log; true; } + echo "Package installation done." + echo "Package uninstallation..." + error_output=$(dnf autoremove --setopt=keepcache=True -y $(echo $package | sed 's/_[0-9].*\.rpm//' | sed 's/.\///') 2>&1) || { echo "$error_output" >> $error_log; echo "Error during autoremove of the package $package" >> $error_log; true; } + echo "Package uninstallation done." + done + # If the file error_log exists and is not empty, the workflow is in error + if [[ -s $error_log ]]; then + cat $error_log + exit 1 + fi + shell: bash + + - if: ${{ matrix.package_extension == 'deb' }} + name: Install packages + run: | + error_log="install_error_${{ matrix.distrib }}_${{ matrix.arch }}.log" + for package in ./*.deb; do + # If the debian package name ends with amd64 or arm64, we only install it if the tested architecture is the same, otherwise we skip it + if [[ $package == *amd64.deb && ${{ matrix.arch }} != "amd64" || $package == *arm64.deb && ${{ matrix.arch }} != "arm64" ]]; then + continue + fi + echo "Installing package: $package" + # List dependencies + dependencies=$(dpkg-deb -I $package | grep Depends | sed 's/Depends: //' | sed 's/,//g' | sed 's/(\(.*\)//g') || { echo "$error_output" >> $error_log; echo "Error while listing dependencies of the package $package" >> $error_log; true; } + for dependency in $dependencies; do + # If the dependency exists in the Debian repository, don't check the local dependencies + dependency_info=$(apt-cache policy $dependency) + if [[ -n $dependency_info ]]; then + echo "Dependency $dependency exists in debian repository." + else + # If the dependency has been built in the same workflow, install it + for dependency_package in $(find . -maxdepth 1 -regex "\.\/${dependency}_[0-9].*all\.deb" -o -regex "\.\/${dependency}_[0-9].*${{ matrix.arch }}\.deb"); do + echo "Installing dependency: $dependency_package" + error_output=$(apt-get install -y ./$dependency_package 2>&1) || { echo "$error_output" >> $error_log; echo "Error during installation of the dependency $dependency" >> $error_log; true; } + done + fi + done + # Install package, then uninstall it with all his dependencies + echo "Package installation..." + error_output=$(apt-get install -y $package 2>&1) || { echo "$error_output" >> $error_log; echo "Error during installation of the package $package" >> $error_log; true; } + echo "Package installation done." + echo "Package uninstallation..." + error_output=$(apt-get autoremove -y --purge $(echo $package | sed 's/_[0-9].*\.deb//' | sed 's/.\///') 2>&1) || { echo "$error_output" >> $error_log; echo "Error during autoremove of the package $package" >> $error_log; true; } + echo "Package uninstallation done." + done + # If the file error_log exists and is not empty, the workflow is in error + if [[ -s $error_log ]]; then + cat $error_log + exit 1 + fi + shell: bash + + - name: Upload error log + if: failure() + uses: actions/upload-artifact@v4 + with: + name: install_error_log_${{ matrix.distrib }}-${{ matrix.arch }} + path: install_error_${{ matrix.distrib }}_${{ matrix.arch }}.log + + deliver-packages: + needs: [get-environment, sign-rpm, download-and-cache-deb, test-packages] if: | needs.get-environment.outputs.skip_workflow == 'false' && (contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && diff --git a/.github/workflows/perl-crypt-argon2.yml b/.github/workflows/perl-crypt-argon2.yml index 7680b17e4..0ce224ca4 100644 --- a/.github/workflows/perl-crypt-argon2.yml +++ b/.github/workflows/perl-crypt-argon2.yml @@ -137,7 +137,7 @@ jobs: # set condition to true if artifacts are needed - if: ${{ false }} name: Upload package artifacts - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-${{ matrix.distrib }}-${{ matrix.arch }} path: ./*.${{ matrix.package_extension}} diff --git a/.github/workflows/perl-filesys-smbclient.yml b/.github/workflows/perl-filesys-smbclient.yml index 4b1d28e2d..35cd2dbf5 100644 --- a/.github/workflows/perl-filesys-smbclient.yml +++ b/.github/workflows/perl-filesys-smbclient.yml @@ -63,7 +63,7 @@ jobs: cp -r ~/rpmbuild/RPMS/x86_64/*.rpm . shell: bash - - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.rpm key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} @@ -97,7 +97,7 @@ jobs: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.rpm key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} @@ -108,7 +108,7 @@ jobs: - run: rpmsign --addsign ./*.rpm shell: bash - - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.rpm key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} @@ -155,7 +155,7 @@ jobs: DEB_BUILD_OPTIONS="nocheck nodocs notest noautodbgsym" dh-make-perl make --dist ${{ matrix.distrib }} --verbose --build --version 4.0${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }} perl-filesys-smbclient/ shell: bash - - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.deb key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }} diff --git a/.github/workflows/perl-json-path.yml b/.github/workflows/perl-json-path.yml index 379b50f16..809657437 100644 --- a/.github/workflows/perl-json-path.yml +++ b/.github/workflows/perl-json-path.yml @@ -122,7 +122,7 @@ jobs: # set condition to true if artifacts are needed - if: ${{ false }} name: Upload package artifacts - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-${{ matrix.distrib }} path: ./*.${{ matrix.package_extension}} diff --git a/.github/workflows/perl-libssh-session.yml b/.github/workflows/perl-libssh-session.yml index 53df82f57..81fdf87d7 100644 --- a/.github/workflows/perl-libssh-session.yml +++ b/.github/workflows/perl-libssh-session.yml @@ -135,7 +135,7 @@ jobs: # set condition to true if artifacts are needed - if: ${{ false }} name: Upload package artifacts - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-${{ matrix.distrib }}-${{ matrix.arch }} path: ./*.${{ matrix.package_extension}} diff --git a/.github/workflows/perl-net-curl.yml b/.github/workflows/perl-net-curl.yml index 38b38938a..da66a7758 100644 --- a/.github/workflows/perl-net-curl.yml +++ b/.github/workflows/perl-net-curl.yml @@ -135,7 +135,7 @@ jobs: # set condition to true if artifacts are needed - if: ${{ false }} name: Upload package artifacts - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-${{ matrix.distrib }}-${{ matrix.arch }} path: ./*.${{ matrix.package_extension }} diff --git a/.github/workflows/perl-openwsman.yml b/.github/workflows/perl-openwsman.yml index 12474ae02..491e3cc67 100644 --- a/.github/workflows/perl-openwsman.yml +++ b/.github/workflows/perl-openwsman.yml @@ -208,7 +208,7 @@ jobs: rpm_gpg_signing_passphrase: ${{ secrets.RPM_GPG_SIGNING_PASSPHRASE }} stability: ${{ needs.get-environment.outputs.stability }} - - uses: actions/cache/save@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.${{ matrix.package_extension }} key: cache-${{ github.sha }}-${{ matrix.package_extension }}-wsman-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }} diff --git a/.github/workflows/perl-vmware-vsphere.yml b/.github/workflows/perl-vmware-vsphere.yml index 7be8efc48..c6173f886 100644 --- a/.github/workflows/perl-vmware-vsphere.yml +++ b/.github/workflows/perl-vmware-vsphere.yml @@ -43,7 +43,7 @@ jobs: shell: bash - name: Cache vsphere cli sources - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: vmware-vsphere-cli-distrib key: ${{ github.sha }}-${{ github.run_id }}-sources-perl-vmware-vsphere @@ -103,7 +103,7 @@ jobs: uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Import source files - uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: vmware-vsphere-cli-distrib key: ${{ github.sha }}-${{ github.run_id }}-sources-perl-vmware-vsphere diff --git a/.github/workflows/plink.yml b/.github/workflows/plink.yml index 31a4435e1..a375aedbf 100644 --- a/.github/workflows/plink.yml +++ b/.github/workflows/plink.yml @@ -57,7 +57,7 @@ jobs: cp -r ~/rpmbuild/RPMS/x86_64/*.rpm . shell: bash - - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.rpm key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} @@ -91,7 +91,7 @@ jobs: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.rpm key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} @@ -102,12 +102,12 @@ jobs: - run: rpmsign --addsign ./*.rpm shell: bash - - uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./*.rpm key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} - - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + - uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: packages-${{ matrix.distrib }} path: ./*.rpm diff --git a/.github/workflows/plugins.yml b/.github/workflows/plugins.yml index 14bb8b2e6..ffd95be3e 100644 --- a/.github/workflows/plugins.yml +++ b/.github/workflows/plugins.yml @@ -37,7 +37,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 with: python-version: '3.9' @@ -137,7 +137,7 @@ jobs: - name: Upload logs as artifacts if tests failed if: failure() - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: plugin-installation-${{ matrix.distrib }} path: ./lastlog.jsonl @@ -157,7 +157,7 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Prepare FatPacker - uses: shogo82148/actions-setup-perl@9c1eca9952ccc07f9ca4a2097b63df93d9d138e9 # v1.31.3 + uses: shogo82148/actions-setup-perl@98dfedee230bcf1ee68d5b021931fc8d63f2016e # v1.31.4 with: perl-version: '5.34' install-modules-with: cpm @@ -168,7 +168,7 @@ jobs: COMMIT=$(git log -1 HEAD --pretty=format:%h) perl .github/scripts/plugins-source.container.pl "${{ needs.get-plugins.outputs.plugins }}" "${{ needs.get-environment.outputs.version }} ($COMMIT)" - - uses: actions/cache/save@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./build/ key: fatpacked-plugins-${{ github.sha }}-${{ github.run_id }} @@ -219,7 +219,7 @@ jobs: - name: Checkout sources uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + - uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./build/ key: fatpacked-plugins-${{ github.sha }}-${{ github.run_id }} @@ -353,7 +353,7 @@ jobs: - name: Upload apt/dnf logs as artifacts if tests failed if: failure() - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: plugin-installation-${{ matrix.distrib }} path: /var/log/robot-plugins-installation-tests.log @@ -412,7 +412,7 @@ jobs: - name: Checkout sources uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + - uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ./build/ key: fatpacked-plugins-${{ github.sha }}-${{ github.run_id }} diff --git a/.github/workflows/spellchecker.yml b/.github/workflows/spellchecker.yml index 413b881a4..dbaf565f3 100644 --- a/.github/workflows/spellchecker.yml +++ b/.github/workflows/spellchecker.yml @@ -30,7 +30,7 @@ jobs: - added|modified: 'src/**/*.pm' - name: Install CPAN Libraries - uses: shogo82148/actions-setup-perl@9c1eca9952ccc07f9ca4a2097b63df93d9d138e9 # v1.31.3 + uses: shogo82148/actions-setup-perl@98dfedee230bcf1ee68d5b021931fc8d63f2016e # v1.31.4 with: perl-version: '5.34' install-modules-with: cpm diff --git a/.gitignore b/.gitignore index 21c3e1f4b..832e6bb1b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ log.html output.xml report.html +.editorconfig +.idea diff --git a/packaging/centreon-plugin-Applications-Databases-Mongodb/deb.json b/packaging/centreon-plugin-Applications-Databases-Mongodb/deb.json index d5572c448..8dd82444b 100644 --- a/packaging/centreon-plugin-Applications-Databases-Mongodb/deb.json +++ b/packaging/centreon-plugin-Applications-Databases-Mongodb/deb.json @@ -1,6 +1,13 @@ { "dependencies": [ + "libboolean-perl", + "libbson-perl", "libdatetime-perl", - "libmongodb-perl" + "libhash-ordered-perl", + "libmongodb-perl", + "libsafe-isa-perl", + "libtype-tiny-perl", + "libuuid-perl", + "libuuid-urandom-perl" ] } diff --git a/packaging/centreon-plugin-Applications-Databases-Mongodb/rpm.json b/packaging/centreon-plugin-Applications-Databases-Mongodb/rpm.json index e0d73e9dd..e13e61594 100644 --- a/packaging/centreon-plugin-Applications-Databases-Mongodb/rpm.json +++ b/packaging/centreon-plugin-Applications-Databases-Mongodb/rpm.json @@ -1,9 +1,9 @@ { "dependencies": [ - "perl(Time::HiRes)", "perl(DateTime)", - "perl(MongoDB)", "perl(Hash::Ordered)", - "perl(URI::Encode)" + "perl(MongoDB)", + "perl(Time::HiRes)", + "perl(URI::Encode)" ] } diff --git a/packaging/centreon-plugin-Applications-Haproxy-Web/deb.json b/packaging/centreon-plugin-Applications-Haproxy-Web/deb.json new file mode 100644 index 000000000..540c269f3 --- /dev/null +++ b/packaging/centreon-plugin-Applications-Haproxy-Web/deb.json @@ -0,0 +1,5 @@ +{ + "dependencies": [ + "libjson-perl" + ] +} diff --git a/packaging/centreon-plugin-Applications-Haproxy-Web/pkg.json b/packaging/centreon-plugin-Applications-Haproxy-Web/pkg.json new file mode 100644 index 000000000..7dd3cd166 --- /dev/null +++ b/packaging/centreon-plugin-Applications-Haproxy-Web/pkg.json @@ -0,0 +1,9 @@ +{ + "pkg_name": "centreon-plugin-Applications-Haproxy-Web", + "pkg_summary": "Centreon Plugin to monitor HAProxy through JSON web stats page", + "plugin_name": "centreon_haproxy_web.pl", + "files": [ + "centreon/plugins/script_custom.pm", + "apps/haproxy/web/" + ] +} \ No newline at end of file diff --git a/packaging/centreon-plugin-Applications-Haproxy-Web/rpm.json b/packaging/centreon-plugin-Applications-Haproxy-Web/rpm.json new file mode 100644 index 000000000..40759f6e0 --- /dev/null +++ b/packaging/centreon-plugin-Applications-Haproxy-Web/rpm.json @@ -0,0 +1,5 @@ +{ + "dependencies": [ + "perl(JSON::XS)" + ] +} diff --git a/packaging/centreon-plugin-Applications-Podman-Restapi/deb.json b/packaging/centreon-plugin-Applications-Podman-Restapi/deb.json new file mode 100644 index 000000000..d1383e463 --- /dev/null +++ b/packaging/centreon-plugin-Applications-Podman-Restapi/deb.json @@ -0,0 +1,4 @@ +{ + "dependencies": [ + ] +} diff --git a/packaging/centreon-plugin-Applications-Podman-Restapi/pkg.json b/packaging/centreon-plugin-Applications-Podman-Restapi/pkg.json new file mode 100644 index 000000000..9432bf6fb --- /dev/null +++ b/packaging/centreon-plugin-Applications-Podman-Restapi/pkg.json @@ -0,0 +1,9 @@ +{ + "pkg_name": "centreon-plugin-Applications-Podman-Restapi", + "pkg_summary": "Centreon Plugin", + "plugin_name": "centreon_podman_restapi.pl", + "files": [ + "centreon/plugins/script_custom.pm", + "apps/podman/restapi/" + ] +} diff --git a/packaging/centreon-plugin-Applications-Podman-Restapi/rpm.json b/packaging/centreon-plugin-Applications-Podman-Restapi/rpm.json new file mode 100644 index 000000000..d1383e463 --- /dev/null +++ b/packaging/centreon-plugin-Applications-Podman-Restapi/rpm.json @@ -0,0 +1,4 @@ +{ + "dependencies": [ + ] +} diff --git a/packaging/centreon-plugin-Network-Cyberoam-Snmp/deb.json b/packaging/centreon-plugin-Network-Cyberoam-Snmp/deb.json index 663aaaceb..3eb4dc696 100644 --- a/packaging/centreon-plugin-Network-Cyberoam-Snmp/deb.json +++ b/packaging/centreon-plugin-Network-Cyberoam-Snmp/deb.json @@ -1,5 +1,6 @@ { "dependencies": [ - "libsnmp-perl" + "libsnmp-perl", + "libdatetime-format-strptime-perl" ] -} \ No newline at end of file +} diff --git a/packaging/centreon-plugin-Network-Cyberoam-Snmp/rpm.json b/packaging/centreon-plugin-Network-Cyberoam-Snmp/rpm.json index 418a331fc..84e108169 100644 --- a/packaging/centreon-plugin-Network-Cyberoam-Snmp/rpm.json +++ b/packaging/centreon-plugin-Network-Cyberoam-Snmp/rpm.json @@ -1,5 +1,6 @@ { "dependencies": [ - "perl(SNMP)" + "perl(SNMP)", + "perl(DateTime::Format::Strptime)" ] -} \ No newline at end of file +} diff --git a/src/apps/haproxy/web/custom/api.pm b/src/apps/haproxy/web/custom/api.pm new file mode 100644 index 000000000..04a8d8225 --- /dev/null +++ b/src/apps/haproxy/web/custom/api.pm @@ -0,0 +1,212 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::haproxy::web::custom::api; + +use strict; +use warnings; +use centreon::plugins::http; +use JSON::XS; + +sub new { + my ($class, %options) = @_; + my $self = {}; + bless $self, $class; + + if (!defined($options{output})) { + print "Class Custom: Need to specify 'output' argument.\n"; + exit 3; + } + if (!defined($options{options})) { + $options{output}->add_option_msg(short_msg => "Class Custom: Need to specify 'options' argument."); + $options{output}->option_exit(); + } + + if (!defined($options{noptions})) { + $options{options}->add_options(arguments => { + 'basic' => { name => 'basic' }, + 'credentials' => { name => 'credentials' }, + 'hostname:s' => { name => 'hostname' }, + 'ntlmv2' => { name => 'ntlmv2' }, + 'password:s' => { name => 'password' }, + 'port:s' => { name => 'port' }, + 'proto:s' => { name => 'proto' }, + 'timeout:s' => { name => 'timeout' }, + 'urlpath:s' => { name => 'url_path' }, + 'username:s' => { name => 'username' }, + 'critical-http-status:s' => { name => 'critical_http_status' }, + 'unknown-http-status:s' => { name => 'unknown_http_status' }, + 'warning-http-status:s' => { name => 'warning_http_status' } + }); + } + + $options{options}->add_help(package => __PACKAGE__, sections => 'API OPTIONS', once => 1); + + $self->{output} = $options{output}; + $self->{http} = centreon::plugins::http->new(%options, default_backend => 'curl'); + + return $self; +} + +sub set_options { + my ($self, %options) = @_; + + $self->{option_results} = $options{option_results}; +} + +sub set_defaults {} + +sub check_options { + my ($self, %options) = @_; + + $self->{hostname} = (defined($self->{option_results}->{hostname})) ? $self->{option_results}->{hostname} : undef; + $self->{port} = (defined($self->{option_results}->{port})) ? $self->{option_results}->{port} : 8404; + $self->{proto} = (defined($self->{option_results}->{proto})) ? $self->{option_results}->{proto} : 'http'; + $self->{timeout} = (defined($self->{option_results}->{timeout})) ? $self->{option_results}->{timeout} : 10; + $self->{url_path} = (defined($self->{option_results}->{url_path})) ? $self->{option_results}->{url_path} : '/stats;json;'; + $self->{unknown_http_status} = (defined($self->{option_results}->{unknown_http_status})) ? $self->{option_results}->{unknown_http_status} : '(%{http_code} < 200 or %{http_code} >= 300) and %{http_code} != 424'; + $self->{warning_http_status} = (defined($self->{option_results}->{warning_http_status})) ? $self->{option_results}->{warning_http_status} : ''; + $self->{critical_http_status} = (defined($self->{option_results}->{critical_http_status})) ? $self->{option_results}->{critical_http_status} : ''; + + if (!defined($self->{hostname}) || $self->{hostname} eq '') { + $self->{output}->add_option_msg(short_msg => "Need to specify --hostname option."); + $self->{output}->option_exit(); + } + return 0; +} + +sub build_options_for_httplib { + my ($self, %options) = @_; + + $self->{option_results}->{hostname} = $self->{hostname}; + $self->{option_results}->{timeout} = $self->{timeout}; + $self->{option_results}->{port} = $self->{port}; + $self->{option_results}->{proto} = $self->{proto}; + $self->{option_results}->{timeout} = $self->{timeout}; + +} + +sub settings { + my ($self, %options) = @_; + + return if (defined($self->{settings_done})); + $self->build_options_for_httplib(); + $self->{http}->add_header(key => 'Accept', value => 'application/json'); + $self->{http}->add_header(key => 'Content-Type', value => 'application/json'); + $self->{http}->set_options(%{$self->{option_results}}); + $self->{settings_done} = 1; +} + +sub get_hostname { + my ($self, %options) = @_; + + return $self->{hostname}; +} + +sub get_stats { + my ($self, %options) = @_; + $self->settings(); + my $response = $self->{http}->request(method => 'GET', url_path => $self->{url_path}); + + if (!defined($response) || $response eq '') { + $self->{output}->add_option_msg(short_msg => "API returns empty content [code: '" . $self->{http}->get_code() . "'] [message: '" . $self->{http}->get_message() . "']"); + $self->{output}->option_exit(); + } + + my $decoded; + eval { + $decoded = JSON::XS->new->decode($response); + }; + + if ($@) { + $self->{output}->add_option_msg(short_msg => "Cannot decode response (add --debug option to display returned content)"); + $self->{output}->option_exit(); + } + + if ($self->{http}->get_code() < 200 || $self->{http}->get_code() >= 300) { + $self->{output}->add_option_msg(short_msg => 'API request error (add --debug option to display returned content)'); + $self->{output}->option_exit(); + } + + return $decoded; +} + +1; + +__END__ + +=head1 NAME + +HAProxy HTTP custom mode for web json stats + +=head1 API OPTIONS + +HAProxy web stats + +=over 8 + +=item B<--hostname> + +IP address or FQDN of the HAProxy server. + +=item B<--port> + +Port used by the web server + +=item B<--proto> + +Specify https if needed (default: 'http') + +=item B<--urlpath> + +Define the path of the web page to get (default: '/stats;json;'). + +=item B<--credentials> + +Specify this option if you are accessing a web page using authentication. + +=item B<--username> + +Specify the username for authentication (mandatory if --credentials is specified). + +=item B<--password> + +Specify the password for authentication (mandatory if --credentials is specified). + +=item B<--basic> + +Specify this option if you are accessing a web page using basic authentication and don't want a '401 UNAUTHORIZED' error to be logged on your web server. + +Specify this option if you are accessing a web page using hidden basic authentication or you'll get a '404 NOT FOUND' error. + +(use with --credentials) + +=item B<--ntlmv2> + +Specify this option if you are accessing a web page using NTLMv2 authentication (use with C<--credentials> and C<--port> options). + +=item B<--timeout> + +Define the timeout in seconds (default: 5). + + +=back + +=cut diff --git a/src/apps/haproxy/web/mode/backendusage.pm b/src/apps/haproxy/web/mode/backendusage.pm new file mode 100644 index 000000000..de4c384bc --- /dev/null +++ b/src/apps/haproxy/web/mode/backendusage.pm @@ -0,0 +1,505 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::haproxy::web::mode::backendusage; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use Digest::MD5 qw(md5_hex); +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub prefix_backend_output { + my ($self, %options) = @_; + + return "Backend '" . $options{instance_value}->{display} . "' "; +} + +sub prefix_server_output { + my ($self, %options) = @_; + + return "Server '" . $options{instance_value}->{svname} . "' "; +} + +sub prefix_global_backend_output { + my ($self, %options) = @_; + + return 'backend '; +} + +sub backend_long_output { + my ($self, %options) = @_; + + return "Backend '" . $options{instance_value}->{display} . "':"; +} + +sub custom_status_output { + my ($self, %options) = @_; + + return sprintf("status: %s", $self->{result_values}->{status}); +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { + name => 'backends', + type => 3, + cb_prefix_output => 'prefix_backend_output', + cb_long_output => 'backend_long_output', + message_multiple => 'All Backends are ok', + indent_long_output => ' ', + skipped_code => { -10 => 1 }, + group => [ + { + name => 'backend', + type => 0, + cb_prefix_output => 'prefix_global_backend_output' + }, + { + name => 'servers', + type => 1, + display_long => 1, + cb_prefix_output => 'prefix_server_output', + message_multiple => 'Servers are ok', + skipped_code => { -10 => 1 } + } + ] + } + ]; + + $self->{maps_counters}->{backend} = [ + { + label => 'backend-status', + type => 2, + critical_default => '%{status} !~ /UP/i', + set => { + key_values => [ { name => 'status' }, { name => 'pxname' } ], + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + }, + { label => 'backend-current-queue', nlabel => 'backend.queue.current.count', set => { + key_values => [ { name => 'qcur' }, { name => 'pxname' } ], + output_template => 'current queue: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-current-session-rate', nlabel => 'backend.session.current.rate.countpersecond', set => { + key_values => [ { name => 'rate' }, { name => 'pxname' } ], + output_template => 'current session rate: %s/s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-max-session-rate', nlabel => 'backend.session.max.rate.countpersecond', set => { + key_values => [ { name => 'rate_max' }, { name => 'pxname' } ], + output_template => 'max session rate: %s/s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-current-sessions', nlabel => 'backend.sessions.current.count', set => { + key_values => [ { name => 'scur' }, { name => 'pxname' } ], + output_template => 'current sessions: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-total-sessions', nlabel => 'backend.sessions.total.count', set => { + key_values => [ { name => 'stot', diff => 1 }, { name => 'pxname' } ], + output_template => 'total sessions: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-traffic-in', nlabel => 'backend.traffic.in.bitpersecond', set => { + key_values => [ { name => 'bin', per_second => 1 }, { name => 'pxname' } ], + output_template => 'traffic in: %s %s/s', + output_change_bytes => 2, + perfdatas => [ + { template => '%.2f', min => 0, unit => 'b/s', label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-traffic-out', nlabel => 'backend.traffic.out.bitpersecond', set => { + key_values => [ { name => 'bout', per_second => 1 }, { name => 'pxname' } ], + output_template => 'traffic out: %s %s/s', + output_change_bytes => 2, + perfdatas => [ + { template => '%.2f', min => 0, unit => 'b/s', label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-denied-requests', nlabel => 'backend.requests.denied.count', set => { + key_values => [ { name => 'dreq' }, { name => 'pxname' } ], + output_template => 'denied requests: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-denied-responses', nlabel => 'backend.responses.denied.count', set => { + key_values => [ { name => 'dresp' }, { name => 'pxname' } ], + output_template => 'denied responses: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-connections-errors', nlabel => 'backend.connections.error.count', set => { + key_values => [ { name => 'econ' }, { name => 'pxname' } ], + output_template => 'connection errors: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'backend-responses-errors', nlabel => 'backend.responses.error.count', set => { + key_values => [ { name => 'eresp' }, { name => 'pxname' } ], + output_template => 'responses errors: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + } + ]; + $self->{maps_counters}->{servers} = [ + { + label => 'server-status', + type => 2, + critical_default => '%{status} !~ /UP/i', + set => { + key_values => [ { name => 'status' }, { name => 'svname' } ], + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + }, + { label => 'server-current-sessions', nlabel => 'server.sessions.current.count', set => { + key_values => [ { name => 'scur' }, { name => 'svname' } ], + output_template => 'current sessions: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname'} + ] + } + }, + { label => 'server-current-session-rate', nlabel => 'server.session.current.rate.countpersecond', set => { + key_values => [ { name => 'rate' }, { name => 'svname' } ], + output_template => 'current session rate: %s/s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname' } + ] + } + }, + { label => 'server-max-session-rate', nlabel => 'server.session.max.rate.countpersecond', set => { + key_values => [ { name => 'rate_max' }, { name => 'svname' } ], + output_template => 'max session rate: %s/s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname' } + ] + } + }, + { label => 'server-denied-responses', nlabel => 'server.responses.denied.count', set => { + key_values => [ { name => 'dresp' }, { name => 'svname' } ], + output_template => 'denied responses: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname' } + ] + } + }, + { label => 'server-connections-errors', nlabel => 'server.connections.error.count', set => { + key_values => [ { name => 'econ' }, { name => 'svname' } ], + output_template => 'connection errors: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname' } + ] + } + }, + { label => 'server-responses-errors', nlabel => 'server.responses.error.count', set => { + key_values => [ { name => 'eresp' }, { name => 'svname' } ], + output_template => 'responses errors: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname' } + ] + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, statefile => 1, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'add-servers' => { name => 'add_servers' }, + 'filter-name:s' => { name => 'filter_name' } + }); + + return $self; +} + +sub manage_selection { + my ($self, %options) = @_; + + my $result = $options{custom}->get_stats(); + my $stats; + foreach (@$result) { + foreach my $entry (@$_) { + if ($entry->{objType} eq 'Backend') { + $stats->{$entry->{proxyId}}->{$entry->{field}->{name}} = $entry->{value}->{value}; + } + if ($entry->{objType} eq 'Server') { + $stats->{$entry->{proxyId}}->{servers}->{$entry->{id}}->{$entry->{field}->{name}} = $entry->{value}->{value}; + } + } + } + foreach (keys %$stats) { + my $name; + $name = $stats->{$_}->{pxname}; + + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $name !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add(long_msg => "skipping Backend '" . $name . "'.", debug => 1); + next; + } + if (defined($self->{option_results}->{add_servers})) { + $self->{backends}->{$_}->{servers} = $stats->{$_}->{servers}; + } + + $self->{backends}->{$_}->{backend} = $stats->{$_}; + $self->{backends}->{$_}->{display} = $name; + } + + if (scalar(keys %{$self->{backends}}) <= 0) { + $self->{output}->add_option_msg(short_msg => "No Backend found."); + $self->{output}->option_exit(); + } + + $self->{cache_name} = 'haproxy_' . $self->{mode} . '_' . $options{custom}->get_hostname() . '_' . + (defined($self->{option_results}->{filter_counters}) ? md5_hex($self->{option_results}->{filter_counters}) : md5_hex('all')) . '_' . + (defined($self->{option_results}->{filter_name}) ? md5_hex($self->{option_results}->{filter_name}) : md5_hex('all')); + +} + +1; + +__END__ + +=head1 MODE + +Check HAProxy backend usage. + +=over 8 + +=item B<--add-servers> + +Also display and monitor Servers related to a given backend. + +=item B<--filter-counters> + +Define which counters should appear in the performance data (metrics). +This option will be treated as a regular expression. + +Example: C<--filter-counters='^total-connections$'>. + +=item B<--filter-name> + +Define which backends should be monitored based on their names. +This option will be treated as a regular expression. + +=item B<--warning-backend-status> + +Define the conditions to match for the backend status to be WARNING. +You can use the following variables: %{status}. + +Example: C<--warning-backend-status='%{status} !~ /UP/i'> + +=item B<--critical-backend-status> + +Define the conditions to match for the backend status to be CRITICAL. +Default: C<'%{status} !~ /UP/i'>. +You can use the following variables: C<%{status}>. + +Example: C<--critical-backend-status='%{status} !~ /UP/i'> + +=item B<--warning-server-status> + +Define the conditions to match for the server status to be WARNING. +You can use the following variables: C<%{status}>. + +Example: C<--warning-backend-status='%{status} !~ /UP/i'> + +=item B<--critical-server-status> + +Define the conditions to match for the status to be CRITICAL. Default: C<'%{status} !~ /UP/i'>. +You can use the following variables: C<%{status}>. + +Example: C<--critical-backend-status='%{status} !~ /UP/i'> + +=item B<--warning-backend-current-queue> + +Thresholds. + +=item B<--critical-backend-current-queue> + +Thresholds. + +=item B<--warning-backend-current-session-rate> + +Thresholds. + +=item B<--critical-backend-current-session-rate> + +Thresholds. + +=item B<--warning-backend-max-session-rate> + +Thresholds. + +=item B<--critical-backend-max-session-rate> + +Thresholds. + +=item B<--warning-backend-current-sessions> + +Thresholds. + +=item B<--critical-backend-current-sessions> + +Thresholds. + +=item B<--warning-backend-total-sessions> + +Thresholds. + +=item B<--critical-backend-total-sessions> + +Thresholds. + +=item B<--warning-backend-traffic-in> + +Thresholds in b/s. + +=item B<--critical-backend-traffic-in> + +Thresholds in b/s. + +=item B<--warning-backend-traffic-out> + +Thresholds in b/s. + +=item B<--critical-backend-traffic-out> + +Thresholds in b/s. + +=item B<--warning-backend-denied-requests> + +Thresholds. + +=item B<--critical-backend-denied-requests> + +Thresholds. + +=item B<--warning-backend-denied-responses> + +Thresholds. + +=item B<--critical-backend-denied-responses> + +Thresholds. + +=item B<--warning-backend-connections-errors> + +Thresholds. + +=item B<--critical-backend-connections-errors> + +Thresholds. + +=item B<--warning-backend-responses-errors> + +Thresholds. + +=item B<--critical-backend-responses-errors> + +Thresholds. + +=item B<--warning-server-current-sessions> + +Thresholds. + +=item B<--critical-server-current-sessions> + +Thresholds. + +=item B<--warning-server-current-session-rate> + +Thresholds. + +=item B<--critical-server-current-session-rate> + +Thresholds. + +=item B<--warning-server-max-session-rate> + +Thresholds. + +=item B<--critical-server-max-session-rate> + +Thresholds. + +=item B<--warning-server-denied-responses> + +Thresholds. + +=item B<--critical-server-denied-responses> + +Thresholds. + +=item B<--warning-server-connections-errors> + +Thresholds. + +=item B<--critical-server-connections-errors> + +Thresholds. + +=item B<--warning-server-responses-errors> + +Thresholds. + +=item B<--critical-server-responses-errors> + +Thresholds. + +=back + +=cut diff --git a/src/apps/haproxy/web/mode/frontendusage.pm b/src/apps/haproxy/web/mode/frontendusage.pm new file mode 100644 index 000000000..0c4f39535 --- /dev/null +++ b/src/apps/haproxy/web/mode/frontendusage.pm @@ -0,0 +1,476 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::haproxy::web::mode::frontendusage; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use Digest::MD5 qw(md5_hex); +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub prefix_frontend_output { + my ($self, %options) = @_; + + return "Frontend '" . $options{instance_value}->{display} . "' "; +} + +sub prefix_listener_output { + my ($self, %options) = @_; + + return "Listener '" . $options{instance_value}->{svname} . "' "; +} + +sub prefix_global_frontend_output { + my ($self, %options) = @_; + + return 'frontend '; +} + +sub frontend_long_output { + my ($self, %options) = @_; + + return "Frontend '" . $options{instance_value}->{display} . "':"; +} + +sub custom_status_output { + my ($self, %options) = @_; + + return sprintf("status: %s", $self->{result_values}->{status}); +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'frontends', type => 3, cb_prefix_output => 'prefix_frontend_output', cb_long_output => 'frontend_long_output', message_multiple => 'All frontends are ok', indent_long_output => ' ', skipped_code => { -10 => 1 }, + group => [ + { name => 'frontend', type => 0, cb_prefix_output => 'prefix_global_frontend_output' }, + { name => 'listeners', type => 1, display_long => 1, cb_prefix_output => 'prefix_listener_output', message_multiple => 'listeners are ok', skipped_code => { -10 => 1 } } + ] + } + ]; + + $self->{maps_counters}->{frontend} = [ + { + label => 'frontend-status', + type => 2, + critical_default => '%{status} !~ /OPEN/i', + set => { + key_values => [ { name => 'status' }, { name => 'pxname' } ], + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + }, + { label => 'frontend-current-session-rate', nlabel => 'frontend.session.current.rate.countpersecond', set => { + key_values => [ { name => 'rate' }, { name => 'pxname' } ], + output_template => 'current session rate: %s/s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'frontend-max-session-rate', nlabel => 'frontend.session.max.rate.countpersecond', set => { + key_values => [ { name => 'rate_max' }, { name => 'pxname' } ], + output_template => 'max session rate: %s/s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'frontend-current-sessions', nlabel => 'frontend.sessions.current.count', set => { + key_values => [ { name => 'scur' }, { name => 'pxname' } ], + output_template => 'current sessions: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'frontend-total-sessions', nlabel => 'frontend.sessions.total.count', set => { + key_values => [ { name => 'stot' }, { name => 'pxname' } ], + output_template => 'total sessions: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'frontend-max-sessions', nlabel => 'frontend.sessions.maximum.count', set => { + key_values => [ { name => 'smax' }, { name => 'pxname' } ], + output_template => 'max sessions: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'frontend-traffic-in', nlabel => 'frontend.traffic.in.bitpersecond', set => { + key_values => [ { name => 'bin', per_second => 1 }, { name => 'pxname' } ], + output_template => 'traffic in: %s %s/s', + output_change_bytes => 2, + perfdatas => [ + { template => '%.2f', min => 0, unit => 'b/s', label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'frontend-traffic-out', nlabel => 'frontend.traffic.out.bitpersecond', set => { + key_values => [ { name => 'bout', per_second => 1 }, { name => 'pxname' } ], + output_template => 'traffic out: %s %s/s', + output_change_bytes => 2, + perfdatas => [ + { template => '%.2f', min => 0, unit => 'b/s', label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'frontend-denied-requests', nlabel => 'frontend.requests.denied.count', set => { + key_values => [ { name => 'dreq' }, { name => 'pxname' } ], + output_template => 'denied requests: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'frontend-denied-responses', nlabel => 'frontend.responses.denied.count', set => { + key_values => [ { name => 'dresp' }, { name => 'pxname' } ], + output_template => 'denied responses: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + }, + { label => 'frontend-errors-requests', nlabel => 'frontend.requests.error.count', set => { + key_values => [ { name => 'ereq' }, { name => 'pxname' } ], + output_template => 'error requests: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'pxname' } + ] + } + } + ]; + $self->{maps_counters}->{listeners} = [ + { + label => 'listener-status', + type => 2, + critical_default => '%{status} !~ /OPEN/i', + set => { + key_values => [ { name => 'status' }, { name => 'pxname' } ], + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + }, + { label => 'listener-current-sessions', nlabel => 'listener.sessions.current.count', set => { + key_values => [ { name => 'scur' }, { name => 'svname' } ], + output_template => 'current sessions: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname' } + ] + } + }, + { label => 'listener-denied-requests', nlabel => 'listener.requests.denied.count', set => { + key_values => [ { name => 'dreq' }, { name => 'svname' } ], + output_template => 'denied requests: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname' } + ] + } + }, + { label => 'listener-denied-responses', nlabel => 'listener.responses.denied.count', set => { + key_values => [ { name => 'dresp' }, { name => 'svname' } ], + output_template => 'denied responses: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname' } + ] + } + }, + { label => 'listener-errors-requests', nlabel => 'listener.requests.error.count', set => { + key_values => [ { name => 'ereq' }, { name => 'svname' } ], + output_template => 'error requests: %s', + perfdatas => [ + { template => '%s', min => 0, label_extra_instance => 1, instance_use => 'svname' } + ] + } + }, + { label => 'listener-traffic-in', nlabel => 'listener.traffic.in.bitpersecond', set => { + key_values => [ { name => 'bin', per_second => 1 }, { name => 'pxname' } ], + output_template => 'traffic in: %s %s/s', + output_change_bytes => 2, + perfdatas => [ + { template => '%.2f', min => 0, unit => 'b/s', label_extra_instance => 1, instance_use => 'svname' } + ] + } + }, + { label => 'listener-traffic-out', nlabel => 'listener.traffic.out.bitpersecond', set => { + key_values => [ { name => 'bout', per_second => 1 }, { name => 'svname' } ], + output_template => 'traffic out: %s %s/s', + output_change_bytes => 2, + perfdatas => [ + { template => '%.2f', min => 0, unit => 'b/s', label_extra_instance => 1, instance_use => 'svname' } + ] + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, statefile => 1, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'add-listeners' => { name => 'add_listeners' }, + 'filter-name:s' => { name => 'filter_name' } + }); + + return $self; +} + +sub manage_selection { + my ($self, %options) = @_; + + my $result = $options{custom}->get_stats(); + my $stats; + foreach (@$result) { + foreach my $entry (@$_) { + if ($entry->{objType} eq 'Frontend') { + $stats->{$entry->{proxyId}}->{$entry->{field}->{name}} = $entry->{value}->{value}; + } + if ($entry->{objType} eq 'Listener') { + $stats->{$entry->{proxyId}}->{listeners}->{$entry->{id}}->{$entry->{field}->{name}} = $entry->{value}->{value}; + } + } + } + foreach (keys %$stats) { + my $name; + $name = $stats->{$_}->{pxname}; + + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $name !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add(long_msg => "skipping frontend '" . $name . "'.", debug => 1); + next; + } + + if (defined($self->{option_results}->{add_listeners})) { + $self->{frontends}->{$_}->{listeners} = $stats->{$_}->{listeners}; + } + $self->{frontends}->{$_}->{frontend} = $stats->{$_}; + $self->{frontends}->{$_}->{display} = $name; + } + + if (scalar(keys %{$self->{frontends}}) <= 0) { + $self->{output}->add_option_msg(short_msg => "No Frontend found."); + $self->{output}->option_exit(); + } + + $self->{cache_name} = 'haproxy_' . $self->{mode} . '_' . $options{custom}->get_hostname() . '_' . + (defined($self->{option_results}->{filter_counters}) ? md5_hex($self->{option_results}->{filter_counters}) : md5_hex('all')) . '_' . + (defined($self->{option_results}->{filter_name}) ? md5_hex($self->{option_results}->{filter_name}) : md5_hex('all')); + +} + +1; + +__END__ + +=head1 MODE + +Check HAProxy frontend usage. + +=over 8 + +=item B<--add-listeners> + +Also display and monitor listeners related to a given frontend. + +=item B<--filter-counters> + +Define which counters should appear in the performance data (metrics). +This option will be treated as a regular expression. + +Example: --filter-counters='^total-connections$'. + +=item B<--filter-name> + +Define which frontends should be monitored based on their names. +This option will be treated as a regular expression. + +=item B<--warning-frontend-status> + +Define the conditions to match for the status to be B. + +You can use the following variables: C<%{status}>. + +Example: C<--warning-frontend-status='%{status} !~ /UP/i'> + +=item B<--critical-frontend-status> + +Define the conditions to match for the status to be B. Default: C<%{status} !~ /OPEN/i>. + +You can use the following variables: C<%{status}>. + +Example: C<--critical-frontend-status='%{status} !~ /UP/i'> + +=item B<--warning-listener-status> + +Define the conditions to match for the status to be B + +You can use the following variables: C<%{status}>. + +Example: C<--warning-listener-status='%{status} !~ /UP/i'> + +=item B<--critical-listener-status> + +Define the conditions to match for the status to be B. Default: C<%{status} !~ /OPEN/i>. + +You can use the following variables: C<%{status}>. + +Example: C<--critical-listener-status='%{status} !~ /UP/i'> + +=item B<--warning-frontend-current-session-rate> + +Thresholds. + +=item B<--critical-frontend-current-session-rate> + +Thresholds. + +=item B<--warning-frontend-max-session-rate> + +Thresholds. + +=item B<--critical-frontend-max-session-rate> + +Thresholds. + +=item B<--warning-frontend-current-sessions> + +Thresholds. + +=item B<--critical-frontend-current-sessions> + +Thresholds. + +=item B<--warning-frontend-total-sessions> + +Thresholds. + +=item B<--critical-frontend-total-sessions> + +Thresholds. + +=item B<--warning-frontend-max-sessions> + +Thresholds. + +=item B<--critical-frontend-max-sessions> + +Thresholds. + +=item B<--warning-frontend-traffic-in> + +Thresholds in b/s. + +=item B<--critical-frontend-traffic-in> + +Thresholds in b/s. + +=item B<--warning-frontend-traffic-out> + +Thresholds in b/s. + +=item B<--critical-frontend-traffic-out> + +Thresholds in b/s. + +=item B<--warning-frontend-denied-requests> + +Thresholds. + +=item B<--critical-frontend-denied-requests> + +Thresholds. + +=item B<--warning-frontend-denied-responses> + +Thresholds. + +=item B<--critical-frontend-denied-responses> + +Thresholds. + +=item B<--warning-frontend-errors-requests> + +Thresholds. + +=item B<--critical-frontend-errors-requests> + +Thresholds. + +=item B<--warning-listener-current-sessions> + +Thresholds. + +=item B<--critical-listener-current-sessions> + +Thresholds. + +=item B<--warning-listener-denied-requests> + +Thresholds. + +=item B<--critical-listener-denied-requests> + +Thresholds. + +=item B<--warning-listener-denied-responses> + +Thresholds. + +=item B<--critical-listener-denied-responses> + +Thresholds. + +=item B<--warning-listener-errors-requests> + +Thresholds. + +=item B<--critical-listener-errors-requests> + +Thresholds. + +=item B<--warning-listener-traffic-in> + +Thresholds in b/s. + +=item B<--critical-listener-traffic-in> + +Thresholds in b/s. + +=item B<--warning-listener-traffic-out> + +Thresholds in b/s. + +=item B<--critical-listener-traffic-out> + +Thresholds in b/s. + +=back + +=cut diff --git a/src/apps/haproxy/web/mode/listobjects.pm b/src/apps/haproxy/web/mode/listobjects.pm new file mode 100644 index 000000000..4966c90d5 --- /dev/null +++ b/src/apps/haproxy/web/mode/listobjects.pm @@ -0,0 +1,117 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::haproxy::web::mode::listobjects; + +use base qw(centreon::plugins::mode); + +use strict; +use warnings; + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'filter-name:s' => { name => 'filter_name' }, + 'filter-object-type:s' => { name => 'filter_objtype', default => 'frontend|backend' } + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +sub manage_selection { + my ($self, %options) = @_; + + my $results = $options{custom}->get_stats(); + my $backends; + foreach (@$results) { + foreach my $entry (@$_) { + next if (defined($self->{option_results}->{filter_objtype}) && $self->{option_results}->{filter_objtype} ne '' + && lc($entry->{objType}) !~ /$self->{option_results}->{filter_objtype}/); + + $backends->{$entry->{proxyId}}->{type} = lc($entry->{objType}); + next if ($entry->{field}->{name} !~ /^(pxname|status)$/); + $backends->{$entry->{proxyId}}->{$entry->{field}->{name}} = $entry->{value}->{value}; + } + } + return $backends; +} + +sub run { + my ($self, %options) = @_; + + my $backends = $self->manage_selection(%options); + foreach (sort keys %$backends) { + $self->{output}->output_add( + long_msg => sprintf("[name = %s][status = %s][type = %s]", $backends->{$_}->{pxname}, $backends->{$_}->{status}, $backends->{$_}->{type}) + ); + } + + $self->{output}->output_add(severity => 'OK', short_msg => 'HAProxy objects:'); + $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1, force_long_output => 1); + $self->{output}->exit(); +} + +sub disco_format { + my ($self, %options) = @_; + + $self->{output}->add_disco_format(elements => ['name','status','type']); +} + +sub disco_show { + my ($self, %options) = @_; + + my $backends = $self->manage_selection(%options); + foreach (sort keys %$backends) { + $self->{output}->add_disco_entry( + name => $backends->{$_}->{pxname}, + status => $backends->{$_}->{status}, + type => $backends->{$_}->{type}, + ); + } +} +1; + +__END__ + +=head1 MODE + +List HAProxy objects (Backends & Frontends). + +=over 8 + +=item B<--filter-object-type> + +Filter object type (can be a regexp). + +=item B<--filter-name> + +Filter object name (can be a regexp). + +=back + +=cut \ No newline at end of file diff --git a/src/apps/haproxy/web/plugin.pm b/src/apps/haproxy/web/plugin.pm new file mode 100644 index 000000000..94537011b --- /dev/null +++ b/src/apps/haproxy/web/plugin.pm @@ -0,0 +1,51 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::haproxy::web::plugin; + +use strict; +use warnings; +use base qw(centreon::plugins::script_custom); + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $self->{version} = '1.0'; + $self->{modes} = { + 'backend-usage' => 'apps::haproxy::web::mode::backendusage', + 'frontend-usage' => 'apps::haproxy::web::mode::frontendusage', + 'list-objects' => 'apps::haproxy::web::mode::listobjects' + }; + + $self->{custom_modes}->{api} = 'apps::haproxy::web::custom::api'; + return $self; +} + +1; + +__END__ + +=head1 PLUGIN DESCRIPTION + +Check HAProxy stats using HTTP stats page. + +=cut diff --git a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm index 10046f168..740d24443 100644 --- a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm +++ b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm @@ -61,8 +61,9 @@ sub set_counters { $self->{maps_counters}->{global} = [ { label => 'scenario-status', type => 2, - warning_default => '%{status} !~ "Success"', + warning_default => '%{status} =~ /(Aborted|Stopped|Excluded|Degraded)/', critical_default => '%{status} =~ "Failure"', + unknown_default => '%{status} =~ /(Unknown|No execution)/', set => { key_values => [ { name => 'status' }, { name => 'num_status' }, { name => 'display' } ], closure_custom_output => $self->can('custom_status_output'), @@ -133,7 +134,7 @@ sub check_options { my ($self, %options) = @_; $self->SUPER::check_options(%options); - $self->{timeframe} = defined($self->{option_results}->{timeframe}) && $self->{option_results}->{timeframe} ne '' ? $self->{option_results}->{timeframe} : '900'; + $self->{timeframe} = defined($self->{option_results}->{timeframe}) && $self->{option_results}->{timeframe} ne '' ? $self->{option_results}->{timeframe} : '7500'; } my $status_mapping = { @@ -220,20 +221,24 @@ Check ip-label Ekara scenarios. =item B<--timeframe> -Set timeframe period in seconds. (default: 900) -Example: --timeframe='3600' will check the last hour - - +Set timeframe period in seconds. (default: 7500) +Example: C<--timeframe='3600'> will check the last hour. +Note: If the API/Poller is overloaded, it is preferable to refine +this value according to the highest check frequency in the scenario. =item B<--filter-type> Filter by scenario type. Can be: 'WEB', 'HTTPR', 'BROWSER PAGE LOAD' +=item B<--unknown-scenario-status> +Unknown threshold for scenario status (default: C<%{status} !~ /(Unknown|No execution)/>). +Syntax: C<--unknown-scenario-status='%{status} =~ "xxx"'> + =item B<--warning-scenario-status> -Warning threshold for scenario status (default: '%{status} !~ "Success"'). -Syntax: --warning-scenario-status='%{status} =~ "xxx"' +Warning threshold for scenario status (default: C<%{status} !~ /(Aborted|Stopped|Excluded|Degraded)/>). +Syntax: C<--warning-scenario-status='%{status} =~ "xxx"'> =item B<--critical-scenario-status> diff --git a/src/apps/podman/restapi/custom/api.pm b/src/apps/podman/restapi/custom/api.pm new file mode 100644 index 000000000..2ae7eff74 --- /dev/null +++ b/src/apps/podman/restapi/custom/api.pm @@ -0,0 +1,322 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::podman::restapi::custom::api; + +use strict; +use warnings; +use centreon::plugins::http; +use centreon::plugins::misc; +use JSON::XS; + +sub new { + my ($class, %options) = @_; + my $self = {}; + bless $self, $class; + + if (!defined($options{output})) { + print "Class Custom: Need to specify 'output' argument.\n"; + exit 3; + } + if (!defined($options{options})) { + $options{output}->add_option_msg(short_msg => "Class Custom: Need to specify 'options' argument."); + $options{output}->option_exit(); + } + + if (!defined($options{noptions})) { + $options{options}->add_options(arguments => { + 'hostname:s' => { name => 'hostname' }, + 'port:s' => { name => 'port' }, + 'proto:s' => { name => 'proto' }, + 'url-path:s' => { name => 'url_path' }, + 'timeout:s' => { name => 'timeout' } + }); + # curl --cacert /path/to/ca.crt --cert /path/to/podman.crt --key /path/to/podman.key https://localhost:8080/v5.0.0/libpod/info + # curl --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock 'http://d/v5.0.0/libpod/pods/stats?namesOrIDs=blog' | jq + } + $options{options}->add_help(package => __PACKAGE__, sections => 'REST API OPTIONS', once => 1); + + $self->{output} = $options{output}; + $self->{http} = centreon::plugins::http->new(%options, default_backend => 'curl'); + + return $self; +} + +sub set_options { + my ($self, %options) = @_; + + $self->{option_results} = $options{option_results}; +} + +sub set_defaults {} + +sub check_options { + my ($self, %options) = @_; + + $self->{hostname} = (defined($self->{option_results}->{hostname})) ? $self->{option_results}->{hostname} : ''; + $self->{proto} = (defined($self->{option_results}->{proto})) ? $self->{option_results}->{proto} : 'https'; + $self->{port} = (defined($self->{option_results}->{port})) ? $self->{option_results}->{port} : 443; + $self->{url_path} = (defined($self->{option_results}->{url_path})) ? $self->{option_results}->{url_path} : '/v5.0.0/libpod/'; + $self->{timeout} = (defined($self->{option_results}->{timeout})) ? $self->{option_results}->{timeout} : 30; + + if ($self->{hostname} eq '') { + $self->{output}->add_option_msg(short_msg => 'Need to specify hostname option.'); + $self->{output}->option_exit(); + } + + $self->{http}->set_options(%{$self->{option_results}}); + + return 0; +} + +sub json_decode { + my ($self, %options) = @_; + + $options{content} =~ s/\r//mg; + my $decoded; + eval { + $decoded = JSON::XS->new->utf8->decode($options{content}); + }; + if ($@) { + $self->{output}->add_option_msg(short_msg => "Cannot decode json response: $@"); + $self->{output}->option_exit(); + } + + return $decoded; +} + +sub build_options_for_httplib { + my ($self, %options) = @_; + + $self->{option_results}->{hostname} = $self->{hostname}; + $self->{option_results}->{port} = $self->{port}; + $self->{option_results}->{proto} = $self->{proto}; + $self->{option_results}->{timeout} = $self->{timeout}; +} + +sub settings { + my ($self, %options) = @_; + + $self->build_options_for_httplib(); + $self->{http}->add_header(key => 'Accept', value => 'application/json'); + $self->{http}->set_options(%{$self->{option_results}}); +} + +sub request { + my ($self, %options) = @_; + + my $endpoint = $options{full_endpoint}; + if (!defined($endpoint)) { + $endpoint = $self->{url_path} . $options{endpoint}; + } + + $self->settings(); + + my $content = $self->{http}->request( + method => $options{method}, + url_path => $endpoint, + get_param => $options{get_param}, + header => [ + 'Accept: application/json' + ], + warning_status => '', + unknown_status => '', + critical_status => '' + ); + + my $decoded = $self->json_decode(content => $content); + if (!defined($decoded)) { + $self->{output}->add_option_msg(short_msg => 'Error while retrieving data (add --debug option for detailed message)'); + $self->{output}->option_exit(); + } + return $decoded; +} + +sub system_info { + my ($self, %options) = @_; + + my $results = $self->request( + endpoint => 'info', + method => 'GET' + ); + + return $results; +} + +sub list_containers { + my ($self, %options) = @_; + + my $results = $self->request( + endpoint => 'containers/json', + method => 'GET' + ); + + my $containers = {}; + foreach my $container (@{$results}) { + $containers->{$container->{Id}} = { + Name => $container->{Names}->[0], + PodName => $container->{PodName}, + State => $container->{State} + }; + } + + return $containers; +} + +sub list_pods { + my ($self, %options) = @_; + + my $results = $self->request( + endpoint => 'pods/json', + method => 'GET' + ); + + my $pods = {}; + foreach my $pod (@{$results}) { + $pods->{$pod->{Id}} = { + Name => $pod->{Name}, + Status => $pod->{Status} + }; + } + + return $pods; +} + +sub get_pod_infos { + my ($self, %options) = @_; + + my $inspect = $self->request( + endpoint => 'pods/' . $options{pod_name} . '/json', + method => 'GET' + ); + + my $stats = $self->request( + endpoint => 'pods/stats?namesOrIDs=' . $options{pod_name}, + method => 'GET' + ); + + my $pod = { + cpu => 0, + memory => 0, + running_containers => 0, + stopped_containers => 0, + paused_containers => 0, + state => @{$inspect}[0]->{State} + }; + + foreach my $container (@{$inspect->[0]->{Containers}}) { + $pod->{running_containers}++ if ($container->{State} eq 'running'); + $pod->{stopped_containers}++ if ($container->{State} eq 'exited'); + $pod->{paused_containers}++ if ($container->{State} eq 'paused'); + } + + foreach my $container (@{$stats}) { + my $cpu = $container->{CPU}; + if ($cpu =~ /^(\d+\.\d+)%/) { + $pod->{cpu} += $1; + } + my $memory = $container->{MemUsage}; + if ($memory =~ /^(\d+\.?\d*)([a-zA-Z]+)/) { + $memory = centreon::plugins::misc::convert_bytes(value => $1, unit => $2); + } + $pod->{memory} += $memory; + } + + return $pod; +} + +sub get_container_infos { + my ($self, %options) = @_; + + my $stats = $self->request( + endpoint => 'containers/stats?stream=false&containers=' . $options{container_name}, + method => 'GET' + ); + + my $containers = $self->list_containers(); + my $state; + foreach my $container_id (sort keys %{$containers}) { + if ($containers->{$container_id}->{Name} eq $options{container_name}) { + $state = $containers->{$container_id}->{State}; + } + } + + my $container = { + cpu_usage => $stats->{Stats}->[0]->{CPU}, + memory_usage => $stats->{Stats}->[0]->{MemUsage}, + io_read => $stats->{Stats}->[0]->{BlockInput}, + io_write => $stats->{Stats}->[0]->{BlockOutput}, + network_in => $stats->{Stats}->[0]->{NetInput}, + network_out => $stats->{Stats}->[0]->{NetOutput}, + state => $state + }; + + return $container; +} + +1; + +__END__ + +=head1 NAME + +Podman REST API. + +=head1 SYNOPSIS + +Podman Rest API custom mode. +To connect to the API with a socket, you must add the following command: +C<--curl-opt="CURLOPT_UNIX_SOCKET_PATH => 'PATH_TO_THE_SOCKET'"> +If you use a certificate, you must add the following commands: +C<--curl-opt="CURLOPT_CAINFO = 'PATH_TO_THE_CA_CERTIFICATE'"> +C<--curl-opt="CURLOPT_SSLCERT => 'PATH_TO_THE_CERTIFICATE'"> +C<--curl-opt="CURLOPT_SSLKEY => 'PATH_TO_THE_KEY'"> + +=head1 REST API OPTIONS + +=over 8 + +=item B<--hostname> + +Podman Rest API hostname. + +=item B<--port> + +Port used (Default: 443) + +=item B<--proto> + +Specify https if needed (Default: 'https') + +=item B<--url-path> + +Set path to get Podman Rest API information (Default: '/v5.0.0/libpod/') + +=item B<--timeout> + +Set timeout in seconds (Default: 30) + +=back + +=head1 DESCRIPTION + +B. + +=cut diff --git a/src/apps/podman/restapi/mode/containerusage.pm b/src/apps/podman/restapi/mode/containerusage.pm new file mode 100644 index 000000000..c51657a8c --- /dev/null +++ b/src/apps/podman/restapi/mode/containerusage.pm @@ -0,0 +1,247 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::podman::restapi::mode::containerusage; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'container', type => 0 } + ]; + + $self->{maps_counters}->{container} = [ + { label => 'cpu-usage', + nlabel => 'podman.container.cpu.usage.percent', + set => { + key_values => [ { name => 'cpu_usage' } ], + output_template => 'CPU: %.2f%%', + perfdatas => [ + { label => 'cpu', + value => 'cpu_usage', + template => '%.2f', + unit => '%', + min => 0, + max => 100 } + ] + } + }, + { label => 'memory-usage', + nlabel => 'podman.container.memory.usage.bytes', + set => { + key_values => [ { name => 'memory_usage' } ], + output_template => 'Memory: %s%s', + output_change_bytes => 1, + perfdatas => [ + { label => 'memory', + value => 'memory_usage', + template => '%s', + unit => 'B', + min => 0 } + ] + } + }, + { label => 'read-io', + nlabel => 'podman.container.io.read', + set => { + key_values => [ { name => 'io_read' } ], + output_template => 'Read : %s%s', + output_change_bytes => 1, + perfdatas => [ + { label => 'read.io', + value => 'io_read', + template => '%s', + unit => 'B', + min => 0 } + ] + } + }, + { label => 'write-io', + nlabel => 'podman.container.io.write', + set => { + key_values => [ { name => 'io_write' } ], + output_template => 'Write : %s%s', + output_change_bytes => 1, + perfdatas => [ + { label => 'write.io', + value => 'io_write', + template => '%s', + unit => 'B', + min => 0 } + ] + } + }, + { label => 'network-in', + nlabel => 'podman.container.network.in', + set => { + key_values => [ { name => 'network_in' } ], + output_template => 'Network in: %s%s', + output_change_bytes => 1, + perfdatas => [ + { label => 'network_in', + value => 'network_in', + template => '%s', + unit => 'B', + min => 0 } + ] + } + }, + { label => 'network-out', + nlabel => 'podman.container.network.out', + set => { + key_values => [ { name => 'network_out' } ], + output_template => 'Network out: %s%s', + output_change_bytes => 1, + perfdatas => [ + { label => 'network_out', + value => 'network_out', + template => '%s', + unit => 'B', + min => 0 } + ] + } + }, + { label => 'state', + type => 2, + warning_default => '%{state} =~ /Paused/', + critical_default => '%{state} =~ /Exited/', + set => { + key_values => [ { name => 'state' } ], + output_template => 'State: %s', + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'container-name:s' => { name => 'container_name' } + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); + + if (centreon::plugins::misc::is_empty($self->{option_results}->{container_name})) { + $self->{output}->add_option_msg(short_msg => "Need to specify --container-name option."); + $self->{output}->option_exit(); + } +} + +sub manage_selection { + my ($self, %options) = @_; + + my $container = $options{custom}->get_container_infos( + container_name => $self->{option_results}->{container_name} + ); + + $self->{container} = $container; +} + +1; + +__END__ + +=head1 MODE + +Check container usage. + +=over 8 + +=item B<--container-name> + +Container name. + +=item B<--warning-cpu-usage> + +Threshold warning for CPU usage. + +=item B<--critical-cpu-usage> + +Threshold critical for CPU usage. + +=item B<--warning-memory-usage> + +Threshold warning for memory usage. + +=item B<--critical-memory-usage> + +Threshold critical for memory usage. + +=item B<--warning-read-io> + +Threshold warning for read IO. + +=item B<--critical-read-io> + +Threshold critical for read IO. + +=item B<--warning-write-io> + +Threshold warning for write IO. + +=item B<--critical-write-io> + +Threshold critical for write IO. + +=item B<--warning-network-in> + +Threshold warning for network in. + +=item B<--critical-network-in> + +Threshold critical for network in. + +=item B<--warning-network-out> + +Threshold warning for network out. + +=item B<--critical-network-out> + +Threshold critical for network out. + +=item B<--warning-container-state> + +Define the conditions to match for the state to be WARNING (default: C<'%{state} =~ /Paused/'>). +You can use the following variables: C<%{state}> + +=item B<--critical-container-state> + +Define the conditions to match for the state to be CRITICAL (default: C<'%{state} =~ /Exited/'>). +You can use the following variables: C<%{state}> + +=back + +=cut diff --git a/src/apps/podman/restapi/mode/listcontainers.pm b/src/apps/podman/restapi/mode/listcontainers.pm new file mode 100644 index 000000000..69a355830 --- /dev/null +++ b/src/apps/podman/restapi/mode/listcontainers.pm @@ -0,0 +1,94 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::podman::restapi::mode::listcontainers; + +use base qw(centreon::plugins::mode); + +use strict; +use warnings; + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => + { + }); + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +sub run { + my ($self, %options) = @_; + + my $containers = $options{custom}->list_containers(); + foreach my $container_id (sort keys %{$containers}) { + $self->{output}->output_add(long_msg => '[id = ' . $container_id . "]" . + " [name = '" . $containers->{$container_id}->{Name} . "']" . + " [pod = '" . $containers->{$container_id}->{PodName} . "']" . + " [state = '" . $containers->{$container_id}->{State} . "']" + ); + } + + $self->{output}->output_add(severity => 'OK', + short_msg => 'Containers:'); + $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1, force_long_output => 1); + $self->{output}->exit(); +} + +sub disco_format { + my ($self, %options) = @_; + + $self->{output}->add_disco_format(elements => [ 'id', 'name', 'pod', 'state' ]); +} + +sub disco_show { + my ($self, %options) = @_; + + my $containers = $options{custom}->list_containers(); + foreach my $container_id (sort keys %{$containers}) { + $self->{output}->add_disco_entry(name => $containers->{$container_id}->{Name}, + pod => $containers->{$container_id}->{PodName}, + state => $containers->{$container_id}->{State}, + id => $container_id, + ); + } +} + +1; + +__END__ + +=head1 MODE + +List containers. + +=over 8 + +=back + +=cut + diff --git a/src/apps/podman/restapi/mode/listpods.pm b/src/apps/podman/restapi/mode/listpods.pm new file mode 100644 index 000000000..517e734e3 --- /dev/null +++ b/src/apps/podman/restapi/mode/listpods.pm @@ -0,0 +1,92 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::podman::restapi::mode::listpods; + +use base qw(centreon::plugins::mode); + +use strict; +use warnings; + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => + { + }); + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +sub run { + my ($self, %options) = @_; + + my $pods = $options{custom}->list_pods(); + foreach my $pod_id (sort keys %{$pods}) { + $self->{output}->output_add(long_msg => '[id = ' . $pod_id . "]" . + " [name = '" . $pods->{$pod_id}->{Name} . "']" . + " [status = '" . $pods->{$pod_id}->{Status} . "']" + ); + } + + $self->{output}->output_add(severity => 'OK', + short_msg => 'Pods:'); + $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1, force_long_output => 1); + $self->{output}->exit(); +} + +sub disco_format { + my ($self, %options) = @_; + + $self->{output}->add_disco_format(elements => [ 'id', 'name', 'status' ]); +} + +sub disco_show { + my ($self, %options) = @_; + + my $pods = $options{custom}->list_pods(); + foreach my $pod_id (sort keys %{$pods}) { + $self->{output}->add_disco_entry(name => $pods->{$pod_id}->{Name}, + state => $pods->{$pod_id}->{Status}, + id => $pod_id, + ); + } +} + +1; + +__END__ + +=head1 MODE + +List pods. + +=over 8 + +=back + +=cut + diff --git a/src/apps/podman/restapi/mode/podstatus.pm b/src/apps/podman/restapi/mode/podstatus.pm new file mode 100644 index 000000000..1dd493910 --- /dev/null +++ b/src/apps/podman/restapi/mode/podstatus.pm @@ -0,0 +1,224 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::podman::restapi::mode::podstatus; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'pod', type => 0 } + ]; + + $self->{maps_counters}->{pod} = [ + { label => 'cpu-usage', + nlabel => 'podman.pod.cpu.usage.percent', + set => { + key_values => [ { name => 'cpu' } ], + output_template => 'CPU: %.2f%%', + perfdatas => [ + { label => 'cpu', + value => 'cpu', + template => '%.2f', + unit => '%', + min => 0, + max => 100 } + ] + } + }, + { label => 'memory-usage', + nlabel => 'podman.pod.memory.usage.bytes', set => { + key_values => [ { name => 'memory' } ], + output_template => 'Memory: %s%s', + output_change_bytes => 1, + perfdatas => [ + { label => 'memory', + value => 'memory', + template => '%s', + unit => 'B', + min => 0 } + ] + } + }, + { label => 'running-containers', + nlabel => 'podman.pod.containers.running.count', + set => { + key_values => [ { name => 'containers_running' } ], + output_template => 'Running containers: %s', + perfdatas => [ + { label => 'containers_running', + value => 'containers_running', + template => '%s', + min => 0 } + ] + } + }, + { label => 'stopped-containers', + nlabel => 'podman.pod.containers.stopped.count', + set => { + key_values => [ { name => 'containers_stopped' } ], + output_template => 'Stopped containers: %s', + perfdatas => [ + { label => 'containers_stopped', + value => 'containers_stopped', + template => '%s', + min => 0 } + ] + } + }, + { label => 'paused-containers', + nlabel => 'podman.pod.containers.paused.count', + set => { + key_values => [ { name => 'containers_paused' } ], + output_template => 'Paused containers: %s', + perfdatas => [ + { label => 'containers_paused', + value => 'containers_paused', + template => '%s', + min => 0 } + ] + } + }, + { label => 'state', + type => 2, + warning_default => '%{state} =~ /Exited/', + critical_default => '%{state} =~ /Degraded/', + set => { + key_values => [ { name => 'state' } ], + output_template => 'State: %s', + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'pod-name:s' => { name => 'pod_name' } + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); + + if (centreon::plugins::misc::is_empty($self->{option_results}->{pod_name})) { + $self->{output}->add_option_msg(short_msg => "Need to specify --pod-name option."); + $self->{output}->option_exit(); + } +} + +sub manage_selection { + my ($self, %options) = @_; + + my $result = $options{custom}->get_pod_infos( + pod_name => $self->{option_results}->{pod_name} + ); + + $self->{pod} = { + cpu => $result->{cpu}, + memory => $result->{memory}, + containers_running => $result->{running_containers}, + containers_stopped => $result->{stopped_containers}, + containers_paused => $result->{paused_containers}, + state => $result->{state} + }; +} + +1; + +__END__ + +=head1 MODE + +Check node status. + +=over 8 + +=item B<--pod-name> + +Pod name. + +=item B<--warning-cpu-usage> + +Threshold warning for CPU usage. + +=item B<--critical-cpu-usage> + +Threshold critical for CPU usage. + +=item B<--warning-memory-usage> + +Threshold warning for memory usage. + +=item B<--critical-memory-usage> + +Threshold critical for memory usage. + +=item B<--warning-running-containers> + +Threshold warning for running containers. + +=item B<--critical-running-containers> + +Threshold critical for running containers. + +=item B<--warning-stopped-containers> + +Threshold warning for stopped containers. + +=item B<--critical-stopped-containers> + +Threshold critical for stopped containers. + +=item B<--warning-paused-containers> + +Threshold warning for paused containers. + +=item B<--critical-paused-containers> + +Threshold critical for paused containers. + +=item B<--warning-state> + +Define the conditions to match for the state to be WARNING (default: C<'%{state} =~ /Exited/'>). +You can use the following variables: C<%{state}> + +=item B<--critical-state> + +Define the conditions to match for the state to be CRITICAL (default: C<'%{state} =~ /Degraded/'>). +You can use the following variables: C<%{state}> + +=back + +=cut diff --git a/src/apps/podman/restapi/mode/systemstatus.pm b/src/apps/podman/restapi/mode/systemstatus.pm new file mode 100644 index 000000000..a4731c2cf --- /dev/null +++ b/src/apps/podman/restapi/mode/systemstatus.pm @@ -0,0 +1,240 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::podman::restapi::mode::systemstatus; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold); + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'system', type => 0 } + ]; + + $self->{maps_counters}->{system} = [ + { label => 'cpu-usage', + nlabel => 'podman.system.cpu.usage.percent', + set => { + key_values => [ + { name => 'cpu_usage' } + ], + output_template => 'CPU: %.2f%%', + perfdatas => [ + { label => 'cpu', + template => '%.2f', + min => 0, + max => 100, + unit => '%' } + ] + } + }, + { label => 'memory-usage', + nlabel => 'podman.system.memory.usage.bytes', + set => { + key_values => [ + { name => 'memory_usage' } + ], + output_template => 'Memory: %s%s', + output_change_bytes => 1, + perfdatas => [ + { label => 'memory', + template => '%s', + min => 0, + unit => 'B' } + ] + } + }, + { label => 'swap-usage', + nlabel => 'podman.system.swap.usage.bytes', + set => { + key_values => [ + { name => 'swap_usage' } + ], + output_template => 'Swap: %s%s', + output_change_bytes => 1, + perfdatas => [ + { label => 'swap', + template => '%s', + min => 0, + unit => 'B' } + ] + } + }, + { label => 'containers-running', + nlabel => 'podman.system.containers.running.count', + set => { + key_values => [ + { name => 'running_containers' }, + { name => 'total_containers' } + ], + output_template => 'Running containers: %s', + perfdatas => [ + { label => 'running_containers', + template => '%s', + min => 0, + max => 'total_containers', + unit => '' } + ] + } + }, + { label => 'containers-stopped', + nlabel => 'podman.system.containers.stopped.count', + set => { + key_values => [ + { name => 'stopped_containers' }, + { name => 'total_containers' } + ], + output_template => 'Stopped containers: %s', + perfdatas => [ + { label => 'stopped_containers', + template => '%s', + min => 0, + max => 'total_containers', + unit => '' } + ] + } + }, + { label => 'uptime', + nlabel => 'podman.system.uptime.seconds', + set => { + key_values => [ + { name => 'uptime' } + ], + output_template => 'Uptime: %s s', + perfdatas => [ + { label => 'uptime', + template => '%s', + min => 0, + unit => 's' } + ] + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => {}); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); +} + +sub manage_selection { + my ($self, %options) = @_; + + my $results = $options{custom}->system_info(); + + my $uptime_string = $results->{host}->{uptime}; + my $uptime = 0; + if ($uptime_string =~ /(\d+)h/) { + $uptime += $1 * 3600; + } + if ($uptime_string =~ /(\d+)m/) { + $uptime += $1 * 60; + } + if ($uptime_string =~ /(\d+)s/) { + $uptime += $1; + } + + $self->{system} = { + cpu_usage => $results->{host}->{cpuUtilization}->{userPercent} + $results->{host}->{cpuUtilization}->{systemPercent}, + memory_usage => $results->{host}->{memTotal} - $results->{host}->{memFree}, + swap_usage => $results->{host}->{swapTotal} - $results->{host}->{swapFree}, + running_containers => $results->{store}->{containerStore}->{running}, + stopped_containers => $results->{store}->{containerStore}->{stopped}, + total_containers => $results->{store}->{containerStore}->{number}, + uptime => $uptime + }; +} + +1; + +__END__ + +=head1 MODE + +Check Podman system status. + +=over 8 + +=item B<--warning-cpu-usage> + +Threshold warning in percent for CPU usage. + +=item B<--critical-cpu-usage> + +Threshold critical in percent for CPU usage. + +=item B<--warning-memory-usage> + +Threshold warning in bytes for memory usage. + +=item B<--critical-memory-usage> + +Threshold critical in bytes for memory usage. + +=item B<--warning-swap-usage> + +Threshold warning in bytes for swap usage. + +=item B<--critical-swap-usage> + +Threshold critical in bytes for swap usage. + +=item B<--warning-containers-running> + +Threshold warning for the number of running containers. + +=item B<--critical-containers-running> + +Threshold critical for the number of running containers. + +=item B<--warning-containers-stopped> + +Threshold warning for the number of stopped containers. + +=item B<--critical-containers-stopped> + +Threshold critical for the number of stopped containers. + +=item B<--warning-uptime> + +Threshold warning for uptime in seconds. + +=item B<--critical-uptime> + +Threshold critical for uptime in seconds. + +=back + +=cut diff --git a/src/apps/podman/restapi/plugin.pm b/src/apps/podman/restapi/plugin.pm new file mode 100644 index 000000000..91afd62e8 --- /dev/null +++ b/src/apps/podman/restapi/plugin.pm @@ -0,0 +1,53 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::podman::restapi::plugin; + +use strict; +use warnings; +use base qw(centreon::plugins::script_custom); + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $self->{version} = '1.0'; + $self->{modes} = { + 'container-usage' => 'apps::podman::restapi::mode::containerusage', + 'list-containers' => 'apps::podman::restapi::mode::listcontainers', + 'list-pods' => 'apps::podman::restapi::mode::listpods', + 'pod-status' => 'apps::podman::restapi::mode::podstatus', + 'system-status' => 'apps::podman::restapi::mode::systemstatus' + }; + + $self->{custom_modes}->{api} = 'apps::podman::restapi::custom::api'; + return $self; +} + +1; + +__END__ + +=head1 PLUGIN DESCRIPTION + +Check Podman and containers through its HTTPS Rest API (https://docs.podman.io/en/latest/_static/api.html). + +=cut diff --git a/src/apps/protocols/http/mode/jsoncontent.pm b/src/apps/protocols/http/mode/jsoncontent.pm index d57d8b318..c9c786d1f 100644 --- a/src/apps/protocols/http/mode/jsoncontent.pm +++ b/src/apps/protocols/http/mode/jsoncontent.pm @@ -459,7 +459,7 @@ Critical threshold (default: on total matching elements) =item B<--threshold-value> Define the scope to which the numeric thresholds apply. -Possible values for this option: 'value' to check numeric values, 'count' to check the number of values (default: count). +Possible values for this option: 'values' to check numeric values, 'count' to check the number of values (default: count). =item B<--warning-string> diff --git a/src/centreon/common/fortinet/fortigate/snmp/mode/sdwan.pm b/src/centreon/common/fortinet/fortigate/snmp/mode/sdwan.pm index 7fb29f166..50411049f 100644 --- a/src/centreon/common/fortinet/fortigate/snmp/mode/sdwan.pm +++ b/src/centreon/common/fortinet/fortigate/snmp/mode/sdwan.pm @@ -314,9 +314,9 @@ sub manage_selection { name => $self->{sdwan}->{$_}->{name}, vdom => $result->{vdom}, ifName => $result->{ifName}, - in => $result->{traffic_in} * 1000 * 1000, - out => $result->{traffic_out} * 1000 * 1000, - bi => $result->{traffic_bi} * 1000 * 1000, + in => $result->{traffic_in} * 1000, + out => $result->{traffic_out} * 1000, + bi => $result->{traffic_bi} * 1000, }; $self->{sdwan}->{$_}->{jitter} = { diff --git a/src/network/cisco/umbrella/snmp/mode/connectivity.pm b/src/network/cisco/umbrella/snmp/mode/connectivity.pm index 2335c8c7c..6fa58646d 100644 --- a/src/network/cisco/umbrella/snmp/mode/connectivity.pm +++ b/src/network/cisco/umbrella/snmp/mode/connectivity.pm @@ -116,7 +116,7 @@ Can use special variables like: %{status}, %{display} =item B<--critical-*> Define the conditions to match for the status to be CRITICAL. (default: %{status} =~ /red/). -Can be: 'dns-connectivity', 'localdns-connectivity', 'cloud-connectivity', 'ad-connectivity'. +Can be: 'dns-status', 'localdns-status', 'cloud-status', 'ad-status'. Can use special variables like: %{status}, %{display} diff --git a/src/network/cyberoam/snmp/mode/hastatus.pm b/src/network/cyberoam/snmp/mode/hastatus.pm new file mode 100644 index 000000000..c1bd9d9c4 --- /dev/null +++ b/src/network/cyberoam/snmp/mode/hastatus.pm @@ -0,0 +1,191 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::cyberoam::snmp::mode::hastatus; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub custom_status_output { + my ($self, %options) = @_; + + my $msg = "HA is '" . $self->{result_values}->{hastatus} . "' - "; + $msg .= "Current HA State: '" . $self->{result_values}->{hastate} . "' - "; + $msg .= "Peer HA State: '" . $self->{result_values}->{peer_hastate} . "' - "; + $msg .= "HA Port: '" . $self->{result_values}->{ha_port} . "' - "; + $msg .= "HA IP: '" . $self->{result_values}->{ha_ip} . "' - "; + $msg .= "Peer IP: '" . $self->{result_values}->{ha_peer_ip} . "'"; + return $msg; +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'ha', type => 0 }, + ]; + + $self->{maps_counters}->{ha} = [ + { + label => 'status', + type => 2, + set => { + key_values => [ + { name => 'hastate' }, + { name => 'hastatus' }, + { name => 'peer_hastate' }, + { name => 'ha_port' }, + { name => 'ha_ip' }, + { name => 'ha_peer_ip' } + ], + default_critical => '%{hastatus} =~ /^enabled$/ && %{hastate} =~ /^faulty$/', + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub {return 0;}, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'no-ha-status:s' => { name => 'no_ha_status', default => 'UNKNOWN' } + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); + + $self->change_macros(macros => [ 'warning_status', 'critical_status' ]); +} +# snmptranslate -Td .1.3.6.1.4.1.2604.5.1.4.1.0 +# SFOS-FIREWALL-MIB::sfosHAStatus.0 +# sfosHAStatus OBJECT-TYPE +# -- FROM SFOS-FIREWALL-MIB +# -- TEXTUAL CONVENTION HaStatusType +# SYNTAX INTEGER {disabled(0), enabled(1)} +# MAX-ACCESS read-only +# STATUS current +# DESCRIPTION " " +# ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) sophosMIB(2604) sfosXGMIB(5) sfosXGMIBObjects(1) sfosXGHAStats(4) sfosHAStatus(1) 0 } + +my %map_status = ( + 0 => 'disabled', + 1 => 'enabled' +); + +# snmptranslate -Td .1.3.6.1.4.1.2604.5.1.4.4.0 +# SFOS-FIREWALL-MIB::sfosDeviceCurrentHAState.0 +# sfosDeviceCurrentHAState OBJECT-TYPE +# -- FROM SFOS-FIREWALL-MIB +# -- TEXTUAL CONVENTION HaState +# SYNTAX INTEGER {notapplicable(0), auxiliary(1), standAlone(2), primary(3), faulty(4), ready(5)} +# MAX-ACCESS read-only +# STATUS current +# DESCRIPTION "HA State of current Device" +# ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) sophosMIB(2604) sfosXGMIB(5) sfosXGMIBObjects(1) sfosXGHAStats(4) sfosDeviceCurrentHAState(4) 0 } + +my %map_state = ( + 0 => 'notapplicable', + 1 => 'auxiliary', + 2 => 'standAlone', + 3 => 'primary', + 4 => 'faulty', + 5 => 'ready' +); + +sub manage_selection { + my ($self, %options) = @_; + + my $oid_ha_status = '.1.3.6.1.4.1.2604.5.1.4.1.0'; + my $oid_ha_state = '.1.3.6.1.4.1.2604.5.1.4.4.0'; + my $oid_peer_ha_state = '.1.3.6.1.4.1.2604.5.1.4.5.0'; + my $oid_ha_port = '.1.3.6.1.4.1.2604.5.1.4.8.0'; + my $oid_ha_ip = '.1.3.6.1.4.1.2604.5.1.4.9.0'; + my $oid_ha_peer_ip = '.1.3.6.1.4.1.2604.5.1.4.10.0'; + + $self->{ha} = {}; + + my $result = $options{snmp}->get_leef( + oids => + [ $oid_ha_status, $oid_ha_state, $oid_peer_ha_state, $oid_ha_port, $oid_ha_ip, $oid_ha_peer_ip ], + nothing_quit => + 1 + ); + + if ($result->{$oid_ha_status} == 0 or $result->{$oid_ha_state} == 0) { + $self->{output}->output_add( + severity => $self->{option_results}->{no_ha_status}, + short_msg => sprintf("Looks like HA is not enabled, or not applicable .."), + long_msg => sprintf( + "HA Enabled : '%u' HA Status : '%s'", + $map_status{$result->{$oid_ha_status}}, $map_status{$result->{$oid_ha_state}} + ), + ); + $self->{output}->display(); + $self->{output}->exit(); + } + $self->{ha} = { + hastatus => $map_status{$result->{$oid_ha_status}}, + hastate => $map_state{$result->{$oid_ha_state}}, + peer_hastate => $map_state{$result->{$oid_peer_ha_state}}, + ha_port => $result->{$oid_ha_port}, + ha_ip => $result->{$oid_ha_ip}, + ha_peer_ip => $result->{$oid_ha_peer_ip} + }; +} + +1; + +__END__ + +=head1 MODE + +Check current HA-State. +HA-States: notapplicable, auxiliary, standAlone, primary, faulty, ready + +=over 8 + +=item B<--warning-status> + +Trigger warning on %{hastatus} or %{hastate} or %{peer_hastate} values. + +=item B<--critical-status> + +Trigger critical on %{hastatus} or %{hastate} or %{peer_hastate} values. +(default: '%{hastatus} =~ /^enabled$/ && %{hastate} =~ /^faulty$/'). + +=item B<--no-ha-status> + +Status to return when HA not running or not installed (default: 'UNKNOWN'). + +=back + +=cut diff --git a/src/network/cyberoam/snmp/mode/license.pm b/src/network/cyberoam/snmp/mode/license.pm new file mode 100644 index 000000000..75db24c8c --- /dev/null +++ b/src/network/cyberoam/snmp/mode/license.pm @@ -0,0 +1,294 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::cyberoam::snmp::mode::license; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); +use centreon::plugins::misc; +use POSIX; +use Time::Local; +use DateTime::Format::Strptime; + +my $unitdiv = { s => 1, w => 604800, d => 86400, h => 3600, m => 60 }; +my $unitdiv_long = { s => 'seconds', w => 'weeks', d => 'days', h => 'hours', m => 'minutes' }; + +sub custom_expires_perfdata { + my ($self, %options) = @_; + + $self->{output}->perfdata_add( + nlabel => $self->{nlabel} . '.' . $unitdiv_long->{ $self->{instance_mode}->{option_results}->{unit} }, + unit => $self->{instance_mode}->{option_results}->{unit}, + instances => $self->{result_values}->{name}, + value => floor($self->{result_values}->{expires_seconds} / $unitdiv->{ $self->{instance_mode}->{option_results}->{unit} }), + warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}), + critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}), + min => 0 + ); +} + +sub custom_expires_threshold { + my ($self, %options) = @_; + + return $self->{perfdata}->threshold_check( + value => + floor($self->{result_values}->{expires_seconds} / $unitdiv->{ $self->{instance_mode}->{option_results}->{unit} }), + threshold => + [ + { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, + { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' }, + { label => 'unknown-' . $self->{thlabel}, exit_litteral => 'unknown' } + ] + ); +} + +sub custom_status_output { + my ($self, %options) = @_; + + return 'status: ' . $self->{result_values}->{status} . ', expires in ' . $self->{result_values}->{expires_human}; +} + +sub prefix_license_output { + my ($self, %options) = @_; + + return sprintf( + "License '%s' ", + $options{instance_value}->{name} + ); +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { + name => 'licenses', + type => 1, + cb_prefix_output => 'prefix_license_output', + message_multiple => 'All licenses are ok', + skipped_code => { -10 => 1 } + } + ]; + + $self->{maps_counters}->{licenses} = [ + { + label => 'status', + type => 2, + critical_default => '%{status} =~ /expired/i', + set => { + key_values => [ { name => 'name' }, { name => 'status' }, { name => 'expires_human' } ], + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub {return 0;}, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + }, + { + label => 'expires', + type => 1, + nlabel => 'license.expires', + set => { + key_values => [ { name => 'expires_seconds' }, { name => 'expires_human' }, { name => 'name' } ], + output_template => 'expires in %s', + output_use => 'expires_human', + closure_custom_perfdata => $self->can('custom_expires_perfdata'), + closure_custom_threshold_check => $self->can('custom_expires_threshold') + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'filter-name:s' => { name => 'filter_name' }, + 'unit:s' => { name => 'unit', default => 's' } + }); + + return $self; +} + +my %map_lic_status = ( + 0 => 'none', + 1 => 'evaluating', + 2 => 'notsubscribed', + 3 => 'subscribed', + 4 => 'expired', + 5 => 'deactivated' +); + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); + + if ($self->{option_results}->{unit} eq '' || !defined($unitdiv->{$self->{option_results}->{unit}})) { + $self->{option_results}->{unit} = 's'; + } +} + +sub add_license { + my ($self, %options) = @_; + + return if (!defined($options{status})); + return if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $options{name} !~ /$self->{option_results}->{filter_name}/); + + $self->{licenses}->{ $options{name} } = { + name => $options{name}, + status => $options{status}, + expires => $options{expires} + }; + + if (defined($options{expires}) && $options{expires} ne "fail" && $options{status} =~ /subscribed|expired|evaluating/i) { + my $strp = DateTime::Format::Strptime->new( + pattern => '%b %d %Y', + locale => 'en_US', + ); + + my $dt = $strp->parse_datetime($options{expires}); + + $self->{licenses}->{ $options{name} }->{expires_seconds} = $dt->epoch - time(); + $self->{licenses}->{ $options{name} }->{expires_seconds} = 0 if ($self->{licenses}->{ $options{name} }->{expires_seconds} < 0); + $self->{licenses}->{ $options{name} }->{expires_human} = centreon::plugins::misc::change_seconds( + value => $self->{licenses}->{ $options{name} }->{expires_seconds} + ); + } else { + $self->{licenses}->{ $options{name} }->{expires_human} = "n.d."; + } +} + +sub manage_selection { + my ($self, %options) = @_; + + my $oid_base_fw_lic_status = '.1.3.6.1.4.1.2604.5.1.5.1.1.0';# sfosBaseFWLicRegStatus + my $oid_base_fw_lic_expiry_date = '.1.3.6.1.4.1.2604.5.1.5.1.2.0';# sfosBaseFWLicExpiryDate + my $oid_net_protection_lic_status = '.1.3.6.1.4.1.2604.5.1.5.2.1.0';# sfosNetProtectionLicRegStatus + my $oid_net_protection_lic_expiry_date = '.1.3.6.1.4.1.2604.5.1.5.2.2.0';# sfosNetProtectionLicExpiryDate + my $oid_web_protection_lic_status = '.1.3.6.1.4.1.2604.5.1.5.3.1.0';# sfosWebProtectionLicRegStatus + my $oid_web_protection_lic_expiry_date = '.1.3.6.1.4.1.2604.5.1.5.3.2.0';# sfosWebProtectionLicExpiryDate + my $oid_mail_protection_lic_status = '.1.3.6.1.4.1.2604.5.1.5.4.1.0';# sfosMailProtectionLicRegStatus + my $oid_mail_protection_lic_expiry_date = '.1.3.6.1.4.1.2604.5.1.5.4.2.0';# sfosMailProtectionLicExpiryDate + my $oid_web_server_protection_lic_status = '.1.3.6.1.4.1.2604.5.1.5.5.1';# sfosWebServerProtectionLicRegStatus + my $oid_web_server_protection_lic_expiry_date = '.1.3.6.1.4.1.2604.5.1.5.5.2';# sfosWebServerProtectionLicExpiryDate + my $oid_sand_storm_lic_status = '.1.3.6.1.4.1.2604.5.1.5.6.1';# sfosSandstromLicRegStatus + my $oid_sand_storm_protection_lic_expiry_date = '.1.3.6.1.4.1.2604.5.1.5.6.2';# sfosSandstromLicExpiryDate + my $oid_enhanced_support_lic_status = '.1.3.6.1.4.1.2604.5.1.5.7.1';# sfosEnhancedSupportLicRegStatus + my $oid_enhanced_support_lic_expiry_date = '.1.3.6.1.4.1.2604.5.1.5.7.2';# sfosEnhancedSupportLicExpiryDate + my $oid_enhanced_plus_lic_status = '.1.3.6.1.4.1.2604.5.1.5.8.1';# sfosEnhancedPlusLicRegStatus + my $oid_enhanced_plus_lic_expiry_date = '.1.3.6.1.4.1.2604.5.1.5.8.2';# sfosEnhancedPlusLicExpiryDate + my $oid_central_orchestra_lic_status = '.1.3.6.1.4.1.2604.5.1.5.9.1';# sfosCentralOrchestrationLicRegStatus + my $oid_central_orchestra_lic_expiry_date = '.1.3.6.1.4.1.2604.5.1.5.9.2';# sfosCentralOrchestrationLicExpiryDate + + my $result = $options{snmp}->get_leef( + oids => [ + $oid_base_fw_lic_status, + $oid_base_fw_lic_expiry_date, + $oid_net_protection_lic_status, + $oid_net_protection_lic_expiry_date, + $oid_web_protection_lic_status, + $oid_web_protection_lic_expiry_date, + $oid_mail_protection_lic_status, + $oid_mail_protection_lic_expiry_date, + # $oid_web_server_protection_lic_status, + # $oid_web_server_protection_lic_expiry_date, + # $oid_sand_storm_lic_status, + # $oid_sand_storm_protection_lic_expiry_date, + # $oid_enhanced_support_lic_status, + # $oid_enhanced_support_lic_expiry_date, + # $oid_enhanced_plus_lic_status, + # $oid_mail_protection_lic_status, + # $oid_enhanced_plus_lic_expiry_date, + # $oid_central_orchestra_lic_status, + # $oid_central_orchestra_lic_expiry_date + ], + nothing_quit => 1 + ); + + $self->{licenses} = {}; + $self->add_license( + name => 'base_fw', + status => $map_lic_status{$result->{$oid_base_fw_lic_status}}, + expires => $result->{$oid_base_fw_lic_expiry_date} + ); + $self->add_license( + name => 'net_protection', + status => $map_lic_status{$result->{$oid_net_protection_lic_status}}, + expires => $result->{$oid_net_protection_lic_expiry_date} + ); + $self->add_license( + name => 'web_protection', + status => $map_lic_status{$result->{$oid_web_protection_lic_status}}, + expires => $result->{$oid_web_protection_lic_expiry_date} + ); + $self->add_license( + name => 'mail_protection', + status => $map_lic_status{$result->{$oid_mail_protection_lic_status}}, + expires => $result->{$oid_mail_protection_lic_expiry_date} + ); +} + +1; + +__END__ + +=head1 MODE + +Check license (SFOS-FIREWALL-MIB). + +=over 8 + +=item B<--filter-name> + +Filter licenses by name (can be a regexp). + +=item B<--warning-status> + +Define the conditions to match for the status to be WARNING. +You can use the following variables: %{name}, %{status}. + +=item B<--critical-status> + +Define the conditions to match for the status to be CRITICAL (default: '%{status} =~ /expired/i'). +You can use the following variables: %{name}, %{status}. + +=item B<--unit> + +Select the time unit for the expiration thresholds. May be 's' for seconds, 'm' for minutes, 'h' for hours, 'd' for days, 'w' for weeks. Default is seconds. + +=item B<--warning-expires> + +Threshold. +Example: C<--unit=w --warning-expires=2:> will result in a WARNING state when one of the licenses expires in less than +two weeks. + +=item B<--critical-expires> + +Threshold. +Example: C<--unit=w --critical-expires=2:> will result in a CRITICAL state when one of the licenses expires in less than +two weeks. + +=back + +=cut diff --git a/src/network/cyberoam/snmp/mode/listvpns.pm b/src/network/cyberoam/snmp/mode/listvpns.pm new file mode 100644 index 000000000..eafbd4983 --- /dev/null +++ b/src/network/cyberoam/snmp/mode/listvpns.pm @@ -0,0 +1,232 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::cyberoam::snmp::mode::listvpns; + +use base qw(centreon::plugins::mode); + +use strict; +use warnings; + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => { + "filter-name:s" => { name => 'filter_name' }, + "filter-connection-status:s" => { name => 'filter_connection_status' }, + "filter-vpn-activated:s" => { name => 'filter_vpn_activated' }, + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +sub manage_selection { + my ($self, %options) = @_; + + my $map_connection_status = { + 0 => 'inactive', + 1 => 'active', + 2 => 'partially-active' + }; + + my $map_vpn_activated = { + 0 => 'inactive', + 1 => 'active' + }; + + my $map_connection_type = { + 1 => 'host-to-host', + 2 => 'site-to-site', + 3 => 'tunnel-interface' + }; + + my $mapping = { + name => + { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.2' },# sfosIPSecVpnConnName + policy => + { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.4' },# sfosIPSecVpnPolicyUsed + description => + { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.3' },# sfosIPSecVpnConnDes + connection_mode => + { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.5' },# sfosIPSecVpnConnMode + connection_type => + { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.6', map => $map_connection_type },# sfosIPSecVpnConnType + connection_status => + { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.9', map => $map_connection_status },# sfosIPSecVpnConnStatus + activated => + { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.10', map => $map_vpn_activated }# sfosIPSecVpnActivated + }; + # parent oid for all the mapping usage + my $oid_bsnAPEntry = '.1.3.6.1.4.1.2604.5.1.6.1.1.1'; + + my $snmp_result = $options{snmp}->get_table( + oid => $oid_bsnAPEntry, + start => $mapping->{name}->{oid},# First oid of the mapping => here : 2 + end => $mapping->{activated}->{oid}# Last oid of the mapping => here : 23 + ); + + my $results = {}; + # Iterate for all oids catch in snmp result above + foreach my $oid (keys %$snmp_result) { + next if ($oid !~ /^$mapping->{name}->{oid}\.(.*)$/); + my $oid_path = $1; + + my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $oid_path); + + if (!defined($result->{name}) || $result->{name} eq '') { + $self->{output}->output_add(long_msg => + "skipping VPN '$oid_path': cannot get a name. please set it.", + debug => + 1); + next; + } + + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $result->{name} !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{name} . "': no matching name filter.", + debug => + 1); + next; + } + + if (defined($self->{option_results}->{filter_connection_status}) && $self->{option_results}->{filter_connection_status} ne '' && + $result->{connection_status} !~ /$self->{option_results}->{filter_connection_status}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{connection_status} . "': no matching connection_status filter.", + debug => + 1); + next; + } + + if (defined($self->{option_results}->{filter_vpn_activated}) && $self->{option_results}->{filter_vpn_activated} ne '' && + $result->{activated} !~ /$self->{option_results}->{filter_vpn_activated}/) { + $self->{output}->output_add(long_msg => + "skipping '" . $result->{activated} . "': no matching activated filter.", + debug => + 1); + next; + } + + $results->{$oid_path} = { + name => $result->{name}, + policy => $result->{policy}, + description => $result->{description}, + connection_mode => $result->{connection_mode}, + connection_type => $result->{connection_type}, + connection_status => $result->{connection_status}, + activated => $result->{activated} + }; + } + + return $results; +} + +sub run { + my ($self, %options) = @_; + + my $results = $self->manage_selection(snmp => $options{snmp}); + foreach my $oid_path (sort keys %$results) { + $self->{output}->output_add( + long_msg => sprintf( + '[oid_path: %s] [name: %s] [policy: %s] [description: %s] [connection_mode: %s] [connection_type: %s] [connection_status: %s] [activated: %s]', + $oid_path, + $results->{$oid_path}->{name}, + $results->{$oid_path}->{policy}, + $results->{$oid_path}->{description}, + $results->{$oid_path}->{connection_mode}, + $results->{$oid_path}->{connection_type}, + $results->{$oid_path}->{connection_status}, + $results->{$oid_path}->{activated} + ) + ); + } + + $self->{output}->output_add( + severity => 'OK', + short_msg => 'List vpn' + ); + $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1, force_long_output => 1); + $self->{output}->exit(); +} + +sub disco_format { + my ($self, %options) = @_; + + $self->{output}->add_disco_format(elements => + [ 'name', 'policy', 'description', 'connection_mode', 'connection_type', 'connection_status', 'activated' ]); +} + +sub disco_show { + my ($self, %options) = @_; + + my $results = $self->manage_selection(snmp => $options{snmp}); + foreach my $oid_path (sort keys %$results) { + $self->{output}->add_disco_entry( + name => + $results->{$oid_path}->{name}, + policy => + $results->{$oid_path}->{policy}, + description => + $results->{$oid_path}->{description}, + connection_mode => + $results->{$oid_path}->{connection_mode}, + connection_type => + $results->{$oid_path}->{connection_type}, + connection_status => + $results->{$oid_path}->{connection_status}, + activated => + $results->{$oid_path}->{activated} + ); + } +} + +1; + +__END__ + +=head1 MODE + +List VPN. + +=over 8 + +=item B<--filter-name> + +Display VPN matching the filter. + +=item B<--filter-connection-status> + +Display VPN matching the filter. + +=item B<--filter-vpn-activated> + +Display VPN matching the filter. + +=back + +=cut diff --git a/src/network/cyberoam/snmp/mode/vpnstatus.pm b/src/network/cyberoam/snmp/mode/vpnstatus.pm new file mode 100644 index 000000000..d17c96c4b --- /dev/null +++ b/src/network/cyberoam/snmp/mode/vpnstatus.pm @@ -0,0 +1,386 @@ +# +# Copyright 2024 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::cyberoam::snmp::mode::vpnstatus; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub custom_status_output { + my ($self, %options) = @_; + + my $msg = 'status: ' . $self->{result_values}->{connection_status}; + return $msg; +} + +sub prefix_global_output { + my ($self, %options) = @_; + + return 'VPN '; +} + +sub vpn_long_output { + my ($self, %options) = @_; + + return "checking vpn '" . $options{instance_value}->{display} . "'"; +} + +sub prefix_vpn_output { + my ($self, %options) = @_; + + my $output = "VPN '" . $options{instance_value}->{display} . "' "; + + if (defined(($options{instance_value}->{vpn_global}->{description})) + && ($options{instance_value}->{vpn_global}->{description})) { + $output .= "($options{instance_value}->{vpn_global}->{description}) "; + } + + return $output; +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { + name => 'global', + type => 0, + cb_prefix_output => 'prefix_global_output' + }, + { + name => 'vpn', + type => 3, + cb_prefix_output => 'prefix_vpn_output', + cb_long_output => 'vpn_long_output', + indent_long_output => ' ', + message_multiple => 'All VPNs are ok', + group => [ + { name => 'vpn_global', type => 0 } + ] + } + ]; + + $self->{maps_counters}->{global} = [ + { + label => 'total', + type => 1, + nlabel => 'vpn.total.count', + set => { + key_values => [ { name => 'total' } ], + output_template => 'total: %s', + perfdatas => [ + { label => 'total', template => '%s', min => 0 } + ] + } + }, + { + label => 'total-inactive', + type => 1, + nlabel => 'vpn.inactive.count', + set => { + key_values => [ { name => 'inactive' } ], + output_template => 'inactive: %s', + perfdatas => [ + { label => 'total_inactive', template => '%s', min => 0 } + ] + } + }, + { + label => 'total-active', + type => 1, + nlabel => 'vpn.active.count', + set => { + key_values => [ { name => 'active' } ], + output_template => 'active: %s', + perfdatas => [ + { label => 'total_active', template => '%s', min => 0 } + ] + } + }, + { + label => 'total-partially-active', + type => 1, + nlabel => 'vpn.partiallyactive.count', + set => { + key_values => [ { name => 'partiallyActive' } ], + output_template => 'partially active: %s', + perfdatas => [ + { label => 'total_partially_active', template => '%s', min => 0 } + ] + } + } + ]; + + $self->{maps_counters}->{vpn_global} = [ + { + label => 'status', + type => 2, + critical_default => '%{connection_status} =~ /inactive/', + warning_default => '%{connection_status} =~ /partiallyActive/', + set => { + key_values => [ { name => 'connection_status' }, { name => 'display' }, { name => 'description' } ], + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub {return 0;}, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => { + "filter-name:s" => { name => 'filter_name' }, + "filter-vpn-activated:s" => { name => 'filter_vpn_activated' }, + "filter-connection-mode:s" => { name => 'filter_connection_mode' }, + "filter-connection-type:s" => { name => 'filter_connection_type' } + }); + + return $self; +} + +# SFOS-FIREWALL-MIB::sfosIPSecVpnConnStatus +# sfosIPSecVpnConnStatus OBJECT-TYPE +# -- FROM SFOS-FIREWALL-MIB +# -- TEXTUAL CONVENTION IPSecVPNConnectionStatus +# SYNTAX INTEGER {inactive(0), active(1), partially-active(2)} +# MAX-ACCESS read-only +# STATUS current +# DESCRIPTION "Connection status of IPsec tunnel" +# ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) sophosMIB(2604) sfosXGMIB(5) sfosXGMIBObjects(1) sfosXGTunnelInfo(6) sfosVPNInfo(1) sfosIPSecVPNConnInfo(1) sfosIPSecVpnTunnelTable(1) sfosIPSecVpnTunnelEntry(1) 9 } +my $map_connection_status = { + 0 => 'inactive', + 1 => 'active', + 2 => 'partiallyActive' +}; + +# SFOS-FIREWALL-MIB::sfosIPSecVpnActivated +# sfosIPSecVpnActivated OBJECT-TYPE +# -- FROM SFOS-FIREWALL-MIB +# -- TEXTUAL CONVENTION IPSecVPNActivationStatus +# SYNTAX INTEGER {inactive(0), active(1)} +# MAX-ACCESS read-only +# STATUS current +# DESCRIPTION "Activation status of IPsec tunnel" +# ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) sophosMIB(2604) sfosXGMIB(5) sfosXGMIBObjects(1) sfosXGTunnelInfo(6) sfosVPNInfo(1) sfosIPSecVPNConnInfo(1) sfosIPSecVpnTunnelTable(1) sfosIPSecVpnTunnelEntry(1) 10 } +my $map_vpn_activated = { + 0 => 'inactive', + 1 => 'active' +}; + +# SFOS-FIREWALL-MIB::sfosIPSecVpnConnType +# sfosIPSecVpnConnType OBJECT-TYPE +# -- FROM SFOS-FIREWALL-MIB +# -- TEXTUAL CONVENTION IPSecVPNConnectionType +# SYNTAX INTEGER {host-to-host(1), site-to-site(2), tunnel-interface(3)} +# MAX-ACCESS read-only +# STATUS current +# DESCRIPTION "Connection Type of IPsec Tunnel" +# ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) sophosMIB(2604) sfosXGMIB(5) sfosXGMIBObjects(1) sfosXGTunnelInfo(6) sfosVPNInfo(1) sfosIPSecVPNConnInfo(1) sfosIPSecVpnTunnelTable(1) sfosIPSecVpnTunnelEntry(1) 6 } +my $map_connection_type = { + 1 => 'host-to-host', + 2 => 'site-to-site', + 3 => 'tunnel-interface' +}; + +my $mapping = { + name => { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.2' },# sfosIPSecVpnConnName + connection_mode => { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.5' },# sfosIPSecVpnConnMode + connection_type => { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.6', map => $map_connection_type },# sfosIPSecVpnConnType + activated => { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.10', map => $map_vpn_activated }# sfosIPSecVpnActivated +}; + +my $mapping_stat = { + description => { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.3' },# sfosIPSecVpnConnDes + connection_status => + { oid => '.1.3.6.1.4.1.2604.5.1.6.1.1.1.1.9', map => $map_connection_status }# sfosIPSecVpnConnStatus +}; + +sub manage_selection { + my ($self, %options) = @_; + + $self->{vpn} = {}; + $self->{global} = { + inactive => 0, + active => 0, + partiallyActive => 0 + }; + + my $request = [ { oid => $mapping->{name}->{oid} } ]; + push @$request, { oid => $mapping->{activated}->{oid} } + if (defined($self->{option_results}->{filter_vpn_activated}) && $self->{option_results}->{filter_vpn_activated} ne ''); + + push @$request, { oid => $mapping->{connection_mode}->{oid} } + if (defined($self->{option_results}->{filter_connection_mode}) && $self->{option_results}->{filter_connection_mode} ne ''); + + push @$request, { oid => $mapping->{connection_type}->{oid} } + if (defined($self->{option_results}->{filter_connection_type}) && $self->{option_results}->{filter_connection_type} ne ''); + + my $snmp_result = $options{snmp}->get_multiple_table( + oids => $request, + return_type => 1, + nothing_quit => 1 + ); + + foreach (keys %$snmp_result) { + next if (!/^$mapping->{name}->{oid}\.(.*)/); + my $instance = $1; + + my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $instance); + if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $result->{name} !~ /$self->{option_results}->{filter_name}/) { + $self->{output}->output_add(long_msg => "skipping '" . $result->{name} . "': not matching name filter."); + next; + } + + if (defined($self->{option_results}->{filter_connection_type}) && $self->{option_results}->{filter_connection_type} ne '' && + $result->{connection_type} !~ /$self->{option_results}->{filter_connection_type}/) { + $self->{output}->output_add(long_msg => "skipping '" . $result->{connection_type} . "': not matching connection-type filter."); + next; + } + + if (defined($self->{option_results}->{filter_connection_mode}) && $self->{option_results}->{filter_connection_mode} ne '' && + $result->{connection_mode} !~ /$self->{option_results}->{filter_connection_mode}/) { + $self->{output}->output_add(long_msg => "skipping '" . $result->{connection_mode} . "': not matching connection-mode filter."); + next; + } + + if (defined($self->{option_results}->{filter_vpn_activated}) && $self->{option_results}->{filter_vpn_activated} ne '' && + $result->{activated} !~ /$self->{option_results}->{filter_vpn_activated}/) { + $self->{output}->output_add(long_msg => "skipping '" . $result->{activated} . "': not matching vpn-activated filter " . $self->{option_results}->{filter_vpn_activated} . "."); + next; + } + + $self->{vpn}->{ $result->{name} } = { + instance => $instance, + display => $result->{name}, + vpn_global => { display => $result->{name} } }; + } + + if (scalar(keys %{$self->{vpn}}) <= 0) { + $self->{output}->output_add(long_msg => 'no VPN associated'); + return; + } + + $options{snmp}->load( + oids => [ map($_->{oid}, values(%$mapping_stat)) ], + instances => [ map($_->{instance}, values %{$self->{vpn}}) ], + instance_regexp => '^(.*)$' + ); + $snmp_result = $options{snmp}->get_leef(); + + foreach (keys %{$self->{vpn}}) { + my $result = $options{snmp}->map_instance( + mapping => $mapping_stat, + results => $snmp_result, + instance => $self->{vpn}->{$_}->{instance}); + + $self->{global}->{total}++; + $self->{global}->{ $result->{connection_status} }++; + $self->{vpn}->{$_}->{vpn_global}->{connection_status} = $result->{connection_status}; + $self->{vpn}->{$_}->{vpn_global}->{description} = $result->{description}; + } +} + +1; + +__END__ + +=head1 MODE + +Check VPN status. +VPN-Connection-Status: inactive, active, partiallyActive + +=over 8 + +=item B<--filter-counters> + +Only display some counters (regexp can be used). +Example: --filter-counters='^total$|^total-normal$' + +=item B<--filter-name> + +Filter VPN name (can be a regexp). + +=item B<--filter-vpn-activated> + +Filter by the activation status of the VPN (can be a regexp). +Values: active, inactive + +=item B<--filter-connection-mode> + +Filter by the connection mode of the VPN (can be a regexp). + +=item B<--connection-type> + +Filter by the connection type of the VPN (can be a regexp). +Values: host-to-host, site-to-site, tunnel-interface + +=item B<--warning-status> + +Trigger warning on %{connection_status} values. +(default: '%{connection_status} =~ /partiallyActive/'). + +=item B<--critical-status> + +Trigger critical on %{connection_status} values. +(default: '%{connection_status} =~ /inactive/'). + +=item B<--warning-total> + +Thresholds. + +=item B<--critical-total> + +Thresholds. + +=item B<--warning-total-inactive> + +Thresholds. + +=item B<--critical-total-inactive> + +Thresholds. + +=item B<--warning-total-partially-active> + +Thresholds. + +=item B<--critical-total-partially-active> + +Thresholds. + +=item B<--warning-total-active> + +Thresholds. + +=item B<--critical-total-active> + +Thresholds. + +=back + +=cut diff --git a/src/network/cyberoam/snmp/plugin.pm b/src/network/cyberoam/snmp/plugin.pm index 9f5370f0f..f44578051 100644 --- a/src/network/cyberoam/snmp/plugin.pm +++ b/src/network/cyberoam/snmp/plugin.pm @@ -31,13 +31,17 @@ sub new { $self->{version} = '0.1'; $self->{modes} = { - 'cpu' => 'network::cyberoam::snmp::mode::cpu', - 'interfaces' => 'snmp_standard::mode::interfaces', - 'list-interfaces' => 'snmp_standard::mode::listinterfaces', - 'memory' => 'network::cyberoam::snmp::mode::memory', - 'requests' => 'network::cyberoam::snmp::mode::requests', - 'services' => 'network::cyberoam::snmp::mode::services', - 'storage' => 'network::cyberoam::snmp::mode::storage' + 'cpu' => 'network::cyberoam::snmp::mode::cpu', + 'ha-status' => 'network::cyberoam::snmp::mode::hastatus', + 'interfaces' => 'snmp_standard::mode::interfaces', + 'license' => 'network::cyberoam::snmp::mode::license', + 'list-interfaces' => 'snmp_standard::mode::listinterfaces', + 'list-vpns' => 'network::cyberoam::snmp::mode::listvpns', + 'memory' => 'network::cyberoam::snmp::mode::memory', + 'requests' => 'network::cyberoam::snmp::mode::requests', + 'services' => 'network::cyberoam::snmp::mode::services', + 'storage' => 'network::cyberoam::snmp::mode::storage', + 'vpn-status' => 'network::cyberoam::snmp::mode::vpnstatus' }; return $self; diff --git a/src/network/fortinet/fortigate/restapi/mode/licenses.pm b/src/network/fortinet/fortigate/restapi/mode/licenses.pm index 54870fe7a..4898d523c 100644 --- a/src/network/fortinet/fortigate/restapi/mode/licenses.pm +++ b/src/network/fortinet/fortigate/restapi/mode/licenses.pm @@ -45,6 +45,18 @@ sub custom_expires_perfdata { ); } +sub custom_last_update_threshold { + my ($self, %options) = @_; + + return $self->{perfdata}->threshold_check( + value => floor($self->{result_values}->{last_update_seconds} / $unitdiv->{ $self->{instance_mode}->{option_results}->{unit} }), + threshold => [ + { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, + { label => 'warning-'. $self->{thlabel}, exit_litteral => 'warning' } + ] + ); +} + sub custom_expires_threshold { my ($self, %options) = @_; @@ -95,7 +107,17 @@ sub set_counters { closure_custom_perfdata => $self->can('custom_expires_perfdata'), closure_custom_threshold_check => $self->can('custom_expires_threshold') } + }, + { label => 'last-update', set => { + key_values => [ { name => 'last_update_seconds' }, { name => 'last_update_human' }, { name => 'name' } ], + output_template => 'last_update is %s', + output_use => 'last_update_human', + #closure_custom_perfdata => $self->can('custom_expires_perfdata'), + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => $self->can('custom_last_update_threshold') + } } + ]; } @@ -132,6 +154,14 @@ sub add_license { name => $options{name}, status => $options{entry}->{status} }; + + if (defined($options{entry}->{last_update})) { + $self->{licenses}->{ $options{name} }->{last_update_seconds} = time() - $options{entry}->{last_update}; + $self->{licenses}->{ $options{name} }->{last_update_human} = centreon::plugins::misc::change_seconds( + value => $self->{licenses}->{ $options{name} }->{last_update_seconds} + ); + } + if (defined($options{entry}->{expires})) { $self->{licenses}->{ $options{name} }->{expires_seconds} = $options{entry}->{expires} - time(); $self->{licenses}->{ $options{name} }->{expires_seconds} = 0 if ($self->{licenses}->{ $options{name} }->{expires_seconds} < 0); @@ -187,12 +217,13 @@ You can use the following variables: %{name}, %{status}. =item B<--unit> -Select the time unit for the expiration thresholds. May be 's' for seconds, 'm' for minutes, 'h' for hours, 'd' for days, 'w' for weeks. Default is seconds. +Select the time unit for the expiration thresholds. May be 's' for seconds, 'm' for minutes, 'h' for hours, 'd' for days, 'w' for weeks. +Default is seconds. =item B<--warning-*> B<--critical-*> Thresholds. -Can be: 'expires'. +Can be: 'expires', 'last-update' =back diff --git a/src/network/moxa/switch/snmp/mode/interfaces.pm b/src/network/moxa/switch/snmp/mode/interfaces.pm new file mode 100644 index 000000000..49e76ae9b --- /dev/null +++ b/src/network/moxa/switch/snmp/mode/interfaces.pm @@ -0,0 +1,201 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::moxa::switch::snmp::mode::interfaces; + +use base qw(snmp_standard::mode::interfaces); + +use strict; +use warnings; +sub set_oids_status { + my ($self, %options) = @_; + $self->SUPER::set_oids_status(%options); + + # Standard duplex oid don't work on moxa industrial switches (eds405a) + $self->{oid_duplexstatus} = '.1.3.6.1.4.1.8691.7.6.1.10.3.1.3'; + # Moxa provide a specific oid for speed/duplex, with this values definition: + # speed100M-Full(3), + # speed100M-Half(2), + # speed10M-Full(1), + # speed10M-Half(0), + # na(-1) + $self->{oid_duplexstatus_mapping} = { + -1 => 'unknown', 0 => 'halfDuplex', 2 => 'halfDuplex', 3 => 'fullDuplex',1 => 'fullDuplex' + }; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + return $self; +} + +1; + +__END__ + +=head1 MODE + +Check interfaces of moxa industrial switches. + +=over 8 + +=item B<--add-global> + +Check global port statistics (by default if no --add-* option is set). + +=item B<--add-status> + +Check interface status. + +=item B<--add-duplex-status> + +Check duplex status (with --warning-status and --critical-status). + +=item B<--add-traffic> + +Check interface traffic. + +=item B<--add-errors> + +Check interface errors. + +=item B<--add-cast> + +Check interface cast. + +=item B<--add-speed> + +Check interface speed. + +=item B<--add-volume> + +Check interface data volume between two checks (not supposed to be graphed, useful for BI reporting). + +=item B<--check-metrics> + +If the expression is true, metrics are checked (default: '%{opstatus} eq "up"'). + +=item B<--warning-status> + +Define the conditions to match for the status to be WARNING. +You can use the following variables: %{admstatus}, %{opstatus}, %{duplexstatus}, %{display} + +=item B<--critical-status> + +Define the conditions to match for the status to be CRITICAL (default: '%{admstatus} eq "up" and %{opstatus} ne "up"'). +You can use the following variables: %{admstatus}, %{opstatus}, %{duplexstatus}, %{display} + +=item B<--warning-*> B<--critical-*> + +Thresholds. +Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', +'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard', +'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast', +'speed' (b/s). + +=item B<--units-traffic> + +Units of thresholds for the traffic (default: 'percent_delta') ('percent_delta', 'bps', 'counter'). + +=item B<--units-errors> + +Units of thresholds for errors/discards (default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'deltaps', 'counter'). + +=item B<--units-cast> + +Units of thresholds for communication types (default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'deltaps', 'counter'). + +=item B<--nagvis-perfdata> + +Display traffic perfdata to be compatible with NagVis widget. + +=item B<--interface> + +Check only the interfaces with the specified IDs (OID indexes, e.g.: 1,2,...). If empty, all interfaces will be monitored. +To filter on interface names, see --name. + +=item B<--name> + +With this option, the interfaces will be filtered by name (given in option --interface) instead of OID index. The name matching mode supports regular expressions. + +=item B<--regex-id> + +With this option, interface IDs will be filtered using the --interface parameter as a regular expression instead of a list of IDs. + +=item B<--speed> + +Set interface speed for incoming/outgoing traffic (in Mb). + +=item B<--speed-in> + +Set interface speed for incoming traffic (in Mb). + +=item B<--speed-out> + +Set interface speed for outgoing traffic (in Mb). + +=item B<--map-speed-dsl> + +Get interface speed configuration for interfaces of type 'ADSL' and 'VDSL2'. + +Syntax: --map-speed-dsl=interface-src-name,interface-dsl-name + +E.g: --map-speed-dsl=Et0.835,Et0-vdsl2 + +=item B<--force-counters64> + +Force to use 64 bits counters only. Can be used to improve performance. + +=item B<--force-counters32> + +Force to use 32-bit counters (even with SNMP versions 2c and 3). To use when 64 bits counters are buggy. + +=item B<--reload-cache-time> + +Time in minutes before reloading cache file (default: 180). + +=item B<--oid-filter> + +Define the OID to be used to filter interfaces (default: ifName) (values: ifDesc, ifAlias, ifName, IpAddr). + +=item B<--oid-display> + +Define the OID that will be used to name the interfaces (default: ifName) (values: ifDesc, ifAlias, ifName, IpAddr). + +=item B<--oid-extra-display> + +Add an OID to display. + +=item B<--display-transform-src> B<--display-transform-dst> + +Modify the interface name displayed by using a regular expression. + +Example: adding --display-transform-src='eth' --display-transform-dst='ens' will replace all occurrences of 'eth' with 'ens' + +=item B<--show-cache> + +Display cache interface data. + +=back + +=cut diff --git a/src/network/moxa/switch/snmp/plugin.pm b/src/network/moxa/switch/snmp/plugin.pm index 68db9c745..d7c22536e 100644 --- a/src/network/moxa/switch/snmp/plugin.pm +++ b/src/network/moxa/switch/snmp/plugin.pm @@ -32,7 +32,7 @@ sub new { $self->{version} = '0.1'; %{$self->{modes}} = ( 'cpu' => 'network::moxa::switch::snmp::mode::cpu', - 'interfaces' => 'snmp_standard::mode::interfaces', + 'interfaces' => 'network::moxa::switch::snmp::mode::interfaces', 'list-interfaces' => 'snmp_standard::mode::listinterfaces', 'memory' => 'network::moxa::switch::snmp::mode::memory', 'uptime' => 'snmp_standard::mode::uptime', diff --git a/tests/README.md b/tests/README.md index bb7e28886..1d42b40b1 100644 --- a/tests/README.md +++ b/tests/README.md @@ -2,7 +2,7 @@ ## Robot tests -In this project robot is used to order the integration tests. +In this project robot Framework is used to order the integration tests. ### install snmpsim @@ -30,6 +30,21 @@ robot tests/ you can filter the tests run by specifying -e to exclude and -i to include a specific tag before the file path. +## Get new data + +### Http + +Any `curl -v` command should give enough info to create new tests/plugins on new http services. + +If the plugin already exists, you can use the plugin to gater the data with the `--debug --verbose` options. + +### Snmp + +To get snmp data, you can use the snmpwalk command on the host you want to monitor. +```bash +snmpwalk -ObentU -v2c -c 'public' localhost .1 +``` + ## Anonymize tests @@ -40,7 +55,6 @@ the option `--no-anonymization` allow to not anonymize the data and only remove perl ./tests/scripts/slim_walk.pl --snmpwalk-path=tests/hardware/client.snmpwalk > smaller-file.snmpwalk ``` - ## unit tests In this project perl test::v0 is used to run unit tests. diff --git a/tests/apps/haproxy/web/backendusage.robot b/tests/apps/haproxy/web/backendusage.robot new file mode 100644 index 000000000..508e33540 --- /dev/null +++ b/tests/apps/haproxy/web/backendusage.robot @@ -0,0 +1,45 @@ +*** Settings *** +Documentation HAProxy Backend Usage Monitoring + +Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Start Mockoon ${MOCKOON_JSON} +Suite Teardown Stop Mockoon +Test Timeout 120s + + +*** Variables *** +${MOCKOON_JSON} ${CURDIR}${/}mockoon.json +${cmd} ${CENTREON_PLUGINS} +... --plugin=apps::haproxy::web::plugin +... --mode=backend-usage +... --hostname=${HOSTNAME} +... --username='username' +... --password='password' +... --proto='http' +... --port=${APIPORT} + + +*** Test Cases *** +backend-usage ${tc} + [Tags] mockoon restapi + ${command} Catenate + ... ${CMD} + ... --filter-name='${filter_name}' + ... ${extra_options} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc filter_name extra_options expected_result -- + ... 1 STATIC_BG_IMAGE ${EMPTY} OK: Backend 'STATIC_BG_IMAGE' backend status: UP, current queue: 0, current session rate: 0/s, max session rate: 1/s, current sessions: 0, backend-total-sessions : Buffer creation, backend-traffic-in : Buffer creation, backend-traffic-out : Buffer creation, denied requests: 0, denied responses: 0, connection errors: 0, responses errors: 0 | 'STATIC_BG_IMAGE#backend.queue.current.count'=0;;;0; 'STATIC_BG_IMAGE#backend.session.current.rate.countpersecond'=0;;;0; 'STATIC_BG_IMAGE#backend.session.max.rate.countpersecond'=1;;;0; 'STATIC_BG_IMAGE#backend.sessions.current.count'=0;;;0; 'STATIC_BG_IMAGE#backend.requests.denied.count'=0;;;0; 'STATIC_BG_IMAGE#backend.responses.denied.count'=0;;;0; 'STATIC_BG_IMAGE#backend.connections.error.count'=0;;;0; 'STATIC_BG_IMAGE#backend.responses.error.count'=0;;;0; + ... 2 STATIC_BG_IMAGE --warning-backend-max-session-rate=0:0 WARNING: Backend 'STATIC_BG_IMAGE' backend max session rate: 1/s | 'STATIC_BG_IMAGE#backend.queue.current.count'=0;;;0; 'STATIC_BG_IMAGE#backend.session.current.rate.countpersecond'=0;;;0; 'STATIC_BG_IMAGE#backend.session.max.rate.countpersecond'=1;0:0;;0; 'STATIC_BG_IMAGE#backend.sessions.current.count'=0;;;0; 'STATIC_BG_IMAGE#backend.sessions.total.count'=0;;;0; 'STATIC_BG_IMAGE#backend.traffic.in.bitpersecond'=0.00b/s;;;0; 'STATIC_BG_IMAGE#backend.traffic.out.bitpersecond'=0.00b/s;;;0; 'STATIC_BG_IMAGE#backend.requests.denied.count'=0;;;0; 'STATIC_BG_IMAGE#backend.responses.denied.count'=0;;;0; 'STATIC_BG_IMAGE#backend.connections.error.count'=0;;;0; 'STATIC_BG_IMAGE#backend.responses.error.count'=0;;;0; + ... 3 STATIC_BG_IMAGE --critical-backend-max-session-rate=0:0 CRITICAL: Backend 'STATIC_BG_IMAGE' backend max session rate: 1/s | 'STATIC_BG_IMAGE#backend.queue.current.count'=0;;;0; 'STATIC_BG_IMAGE#backend.session.current.rate.countpersecond'=0;;;0; 'STATIC_BG_IMAGE#backend.session.max.rate.countpersecond'=1;;0:0;0; 'STATIC_BG_IMAGE#backend.sessions.current.count'=0;;;0; 'STATIC_BG_IMAGE#backend.sessions.total.count'=0;;;0; 'STATIC_BG_IMAGE#backend.traffic.in.bitpersecond'=0.00b/s;;;0; 'STATIC_BG_IMAGE#backend.traffic.out.bitpersecond'=0.00b/s;;;0; 'STATIC_BG_IMAGE#backend.requests.denied.count'=0;;;0; 'STATIC_BG_IMAGE#backend.responses.denied.count'=0;;;0; 'STATIC_BG_IMAGE#backend.connections.error.count'=0;;;0; 'STATIC_BG_IMAGE#backend.responses.error.count'=0;;;0; + ... 4 APP-IHM ${EMPTY} OK: Backend 'APP-IHM' backend status: UP, current queue: 0, current session rate: 1/s, max session rate: 25/s, current sessions: 0, backend-total-sessions : Buffer creation, backend-traffic-in : Buffer creation, backend-traffic-out : Buffer creation, denied requests: 0, denied responses: 0, connection errors: 1, responses errors: 0 | 'APP-IHM#backend.queue.current.count'=0;;;0; 'APP-IHM#backend.session.current.rate.countpersecond'=1;;;0; 'APP-IHM#backend.session.max.rate.countpersecond'=25;;;0; 'APP-IHM#backend.sessions.current.count'=0;;;0; 'APP-IHM#backend.requests.denied.count'=0;;;0; 'APP-IHM#backend.responses.denied.count'=0;;;0; 'APP-IHM#backend.connections.error.count'=1;;;0; 'APP-IHM#backend.responses.error.count'=0;;;0; + ... 5 APP-IHM --warning-backend-current-session-rate=0:0 WARNING: Backend 'APP-IHM' backend current session rate: 1/s | 'APP-IHM#backend.queue.current.count'=0;;;0; 'APP-IHM#backend.session.current.rate.countpersecond'=1;0:0;;0; 'APP-IHM#backend.session.max.rate.countpersecond'=25;;;0; 'APP-IHM#backend.sessions.current.count'=0;;;0; 'APP-IHM#backend.sessions.total.count'=0;;;0; 'APP-IHM#backend.traffic.in.bitpersecond'=0.00b/s;;;0; 'APP-IHM#backend.traffic.out.bitpersecond'=0.00b/s;;;0; 'APP-IHM#backend.requests.denied.count'=0;;;0; 'APP-IHM#backend.responses.denied.count'=0;;;0; 'APP-IHM#backend.connections.error.count'=1;;;0; 'APP-IHM#backend.responses.error.count'=0;;;0; + ... 6 APP-IHM --critical-backend-current-session-rate=0:0 CRITICAL: Backend 'APP-IHM' backend current session rate: 1/s | 'APP-IHM#backend.queue.current.count'=0;;;0; 'APP-IHM#backend.session.current.rate.countpersecond'=1;;0:0;0; 'APP-IHM#backend.session.max.rate.countpersecond'=25;;;0; 'APP-IHM#backend.sessions.current.count'=0;;;0; 'APP-IHM#backend.sessions.total.count'=0;;;0; 'APP-IHM#backend.traffic.in.bitpersecond'=0.00b/s;;;0; 'APP-IHM#backend.traffic.out.bitpersecond'=0.00b/s;;;0; 'APP-IHM#backend.requests.denied.count'=0;;;0; 'APP-IHM#backend.responses.denied.count'=0;;;0; 'APP-IHM#backend.connections.error.count'=1;;;0; 'APP-IHM#backend.responses.error.count'=0;;;0; + ... 7 APP-RIA ${EMPTY} OK: Backend 'APP-RIA' backend status: UP, current queue: 0, current session rate: 0/s, max session rate: 0/s, current sessions: 0, backend-total-sessions : Buffer creation, backend-traffic-in : Buffer creation, backend-traffic-out : Buffer creation, denied requests: 0, denied responses: 0, connection errors: 0, responses errors: 0 | 'APP-RIA#backend.queue.current.count'=0;;;0; 'APP-RIA#backend.session.current.rate.countpersecond'=0;;;0; 'APP-RIA#backend.session.max.rate.countpersecond'=0;;;0; 'APP-RIA#backend.sessions.current.count'=0;;;0; 'APP-RIA#backend.requests.denied.count'=0;;;0; 'APP-RIA#backend.responses.denied.count'=0;;;0; 'APP-RIA#backend.connections.error.count'=0;;;0; 'APP-RIA#backend.responses.error.count'=0;;;0; + ... 8 APP-RIA --warning-backend-denied-requests=1:1 WARNING: Backend 'APP-RIA' backend denied requests: 0 | 'APP-RIA#backend.queue.current.count'=0;;;0; 'APP-RIA#backend.session.current.rate.countpersecond'=0;;;0; 'APP-RIA#backend.session.max.rate.countpersecond'=0;;;0; 'APP-RIA#backend.sessions.current.count'=0;;;0; 'APP-RIA#backend.sessions.total.count'=0;;;0; 'APP-RIA#backend.traffic.in.bitpersecond'=0.00b/s;;;0; 'APP-RIA#backend.traffic.out.bitpersecond'=0.00b/s;;;0; 'APP-RIA#backend.requests.denied.count'=0;1:1;;0; 'APP-RIA#backend.responses.denied.count'=0;;;0; 'APP-RIA#backend.connections.error.count'=0;;;0; 'APP-RIA#backend.responses.error.count'=0;;;0; + ... 9 APP-RIA --critical-backend-denied-requests=1:1 CRITICAL: Backend 'APP-RIA' backend denied requests: 0 | 'APP-RIA#backend.queue.current.count'=0;;;0; 'APP-RIA#backend.session.current.rate.countpersecond'=0;;;0; 'APP-RIA#backend.session.max.rate.countpersecond'=0;;;0; 'APP-RIA#backend.sessions.current.count'=0;;;0; 'APP-RIA#backend.sessions.total.count'=0;;;0; 'APP-RIA#backend.traffic.in.bitpersecond'=0.00b/s;;;0; 'APP-RIA#backend.traffic.out.bitpersecond'=0.00b/s;;;0; 'APP-RIA#backend.requests.denied.count'=0;;1:1;0; 'APP-RIA#backend.responses.denied.count'=0;;;0; 'APP-RIA#backend.connections.error.count'=0;;;0; 'APP-RIA#backend.responses.error.count'=0;;;0; + + + diff --git a/tests/apps/haproxy/web/frontendusage.robot b/tests/apps/haproxy/web/frontendusage.robot new file mode 100644 index 000000000..d31ad434e --- /dev/null +++ b/tests/apps/haproxy/web/frontendusage.robot @@ -0,0 +1,50 @@ +*** Settings *** +Documentation HAProxy Frontend Usage Monitoring + +Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Start Mockoon ${MOCKOON_JSON} +Suite Teardown Stop Mockoon +Test Timeout 120s + + +*** Variables *** +${MOCKOON_JSON} ${CURDIR}${/}mockoon.json +${cmd} ${CENTREON_PLUGINS} +... --plugin=apps::haproxy::web::plugin +... --mode=frontend-usage +... --hostname=${HOSTNAME} +... --username='username' +... --password='password' +... --proto='http' +... --port=${APIPORT} + + +*** Test Cases *** +frontend-usage ${tc} + [Tags] mockoon restapi + ${command} Catenate + ... ${CMD} + ... --filter-name='${filter_name}' + ... ${extra_options} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc filter_name extra_options expected_result -- + ... 1 ${EMPTY} ${EMPTY} OK: Frontend 'hafrontend' frontend status: OPEN, current session rate: 1/s, max session rate: 6/s, current sessions: 10, total sessions: 3980, max sessions: 16, frontend-traffic-in : Buffer creation, frontend-traffic-out : Buffer creation, denied requests: 0, denied responses: 0, error requests: 42 | 'hafrontend#frontend.session.current.rate.countpersecond'=1;;;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;;;0; 'hafrontend#frontend.sessions.current.count'=10;;;0; 'hafrontend#frontend.sessions.total.count'=3980;;;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + ... 2 hafrontend ${EMPTY} OK: Frontend 'hafrontend' frontend status: OPEN, current session rate: 1/s, max session rate: 6/s, current sessions: 10, total sessions: 3980, max sessions: 16, frontend-traffic-in : Buffer creation, frontend-traffic-out : Buffer creation, denied requests: 0, denied responses: 0, error requests: 42 | 'hafrontend#frontend.session.current.rate.countpersecond'=1;;;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;;;0; 'hafrontend#frontend.sessions.current.count'=10;;;0; 'hafrontend#frontend.sessions.total.count'=3980;;;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + ... 3 none ${EMPTY} UNKNOWN: No Frontend found. + ... 4 hafrontend --warning-frontend-current-session-rate=0:0 WARNING: Frontend 'hafrontend' frontend current session rate: 1/s | 'hafrontend#frontend.session.current.rate.countpersecond'=1;0:0;;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;;;0; 'hafrontend#frontend.sessions.current.count'=10;;;0; 'hafrontend#frontend.sessions.total.count'=3980;;;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.traffic.in.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.traffic.out.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + ... 5 hafrontend --critical-frontend-current-session-rate=0:0 CRITICAL: Frontend 'hafrontend' frontend current session rate: 1/s | 'hafrontend#frontend.session.current.rate.countpersecond'=1;;0:0;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;;;0; 'hafrontend#frontend.sessions.current.count'=10;;;0; 'hafrontend#frontend.sessions.total.count'=3980;;;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.traffic.in.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.traffic.out.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + ... 6 hafrontend --warning-frontend-max-session-rate=0:0 WARNING: Frontend 'hafrontend' frontend max session rate: 6/s | 'hafrontend#frontend.session.current.rate.countpersecond'=1;;;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;0:0;;0; 'hafrontend#frontend.sessions.current.count'=10;;;0; 'hafrontend#frontend.sessions.total.count'=3980;;;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.traffic.in.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.traffic.out.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + ... 7 hafrontend --critical-frontend-max-session-rate=0:0 CRITICAL: Frontend 'hafrontend' frontend max session rate: 6/s | 'hafrontend#frontend.session.current.rate.countpersecond'=1;;;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;;0:0;0; 'hafrontend#frontend.sessions.current.count'=10;;;0; 'hafrontend#frontend.sessions.total.count'=3980;;;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.traffic.in.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.traffic.out.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + ... 8 hafrontend --warning-frontend-current-sessions=0:0 WARNING: Frontend 'hafrontend' frontend current sessions: 10 | 'hafrontend#frontend.session.current.rate.countpersecond'=1;;;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;;;0; 'hafrontend#frontend.sessions.current.count'=10;0:0;;0; 'hafrontend#frontend.sessions.total.count'=3980;;;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.traffic.in.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.traffic.out.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + ... 9 hafrontend --critical-frontend-current-sessions=0:0 CRITICAL: Frontend 'hafrontend' frontend current sessions: 10 | 'hafrontend#frontend.session.current.rate.countpersecond'=1;;;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;;;0; 'hafrontend#frontend.sessions.current.count'=10;;0:0;0; 'hafrontend#frontend.sessions.total.count'=3980;;;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.traffic.in.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.traffic.out.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + ... 10 hafrontend --warning-frontend-total-sessions=0:0 WARNING: Frontend 'hafrontend' frontend total sessions: 3980 | 'hafrontend#frontend.session.current.rate.countpersecond'=1;;;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;;;0; 'hafrontend#frontend.sessions.current.count'=10;;;0; 'hafrontend#frontend.sessions.total.count'=3980;0:0;;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.traffic.in.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.traffic.out.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + ... 11 hafrontend --critical-frontend-total-sessions=0:0 CRITICAL: Frontend 'hafrontend' frontend total sessions: 3980 | 'hafrontend#frontend.session.current.rate.countpersecond'=1;;;0; 'hafrontend#frontend.session.max.rate.countpersecond'=6;;;0; 'hafrontend#frontend.sessions.current.count'=10;;;0; 'hafrontend#frontend.sessions.total.count'=3980;;0:0;0; 'hafrontend#frontend.sessions.maximum.count'=16;;;0; 'hafrontend#frontend.traffic.in.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.traffic.out.bitpersecond'=0.00b/s;;;0; 'hafrontend#frontend.requests.denied.count'=0;;;0; 'hafrontend#frontend.responses.denied.count'=0;;;0; 'hafrontend#frontend.requests.error.count'=42;;;0; + + + + + + diff --git a/tests/apps/haproxy/web/mockoon.json b/tests/apps/haproxy/web/mockoon.json new file mode 100644 index 000000000..73606fb0b --- /dev/null +++ b/tests/apps/haproxy/web/mockoon.json @@ -0,0 +1,154 @@ +{ + "uuid": "18c6b01d-a90c-4b23-b0b3-fe8373fce6dc", + "lastMigration": 33, + "name": "Mockoon", + "endpointPrefix": "", + "latency": 0, + "port": 3000, + "hostname": "", + "folders": [], + "routes": [ + { + "uuid": "843586f6-5ead-4ea3-bd48-3a4c8ec3272b", + "type": "http", + "documentation": "", + "method": "get", + "endpoint": "", + "responses": [ + { + "uuid": "420e43ce-824e-4e80-a9a8-d3ac257c0608", + "body": "{}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + }, + { + "uuid": "bf219176-5880-47ba-b32e-b51004cc32a5", + "type": "http", + "documentation": "", + "method": "get", + "endpoint": "stats;json;", + "responses": [ + { + "uuid": "bf12e240-4fc5-4117-b001-8898d49bafd1", + "body": "[\n [\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"hafrontend\"\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"FRONTEND\"\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 10\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 16\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 6,\n \"name\": \"slim\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Limit\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2000\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3980\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 190502571\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 155033362\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 10,\n \"name\": \"dreq\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 12,\n \"name\": \"ereq\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 42\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"OPEN\"\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 34,\n \"name\": \"rate_lim\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Limit\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 12182\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 494\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 163\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 46,\n \"name\": \"req_rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 47,\n \"name\": \"req_rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 26\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 12841\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 51,\n \"name\": \"comp_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 52,\n \"name\": \"comp_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 53,\n \"name\": \"comp_byp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 54,\n \"name\": \"comp_rsp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 77,\n \"name\": \"conn_rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 78,\n \"name\": \"conn_rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 21\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 79,\n \"name\": \"conn_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 4271\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 80,\n \"name\": \"intercepted\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1511\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 81,\n \"name\": \"dcon\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 82,\n \"name\": \"dses\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 86,\n \"name\": \"cache_lookups\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 87,\n \"name\": \"cache_hits\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 104,\n \"name\": \"sess_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 105,\n \"name\": \"h1sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3980\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 106,\n \"name\": \"h2sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 107,\n \"name\": \"h3sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 108,\n \"name\": \"req_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 109,\n \"name\": \"h1req\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 12841\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 110,\n \"name\": \"h2req\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 111,\n \"name\": \"h3req\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3222\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 181\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 291\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 116,\n \"name\": \"h2_headers_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 117,\n \"name\": \"h2_data_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 118,\n \"name\": \"h2_settings_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 119,\n \"name\": \"h2_rst_stream_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 120,\n \"name\": \"h2_goaway_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 121,\n \"name\": \"h2_detected_conn_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 122,\n \"name\": \"h2_detected_strm_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 123,\n \"name\": \"h2_rst_stream_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 124,\n \"name\": \"h2_goaway_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 125,\n \"name\": \"h2_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 126,\n \"name\": \"h2_backend_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 127,\n \"name\": \"h2_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 128,\n \"name\": \"h2_backend_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 129,\n \"name\": \"h1_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 10\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 130,\n \"name\": \"h1_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 131,\n \"name\": \"h1_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3980\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 132,\n \"name\": \"h1_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 12799\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 133,\n \"name\": \"h1_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 191110148\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 134,\n \"name\": \"h1_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 155351981\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 135,\n \"name\": \"h1_spliced_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Frontend\",\n \"proxyId\": 2,\n \"id\": 0,\n \"field\": {\n \"pos\": 136,\n \"name\": \"h1_spliced_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-RIA\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB49\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": -1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 3,\n \"id\": 1,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-RIA\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"BACKEND\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 6,\n \"name\": \"slim\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Limit\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 10,\n \"name\": \"dreq\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 51,\n \"name\": \"comp_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 52,\n \"name\": \"comp_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 53,\n \"name\": \"comp_byp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 54,\n \"name\": \"comp_rsp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": -1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 86,\n \"name\": \"cache_lookups\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 87,\n \"name\": \"cache_hits\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 100,\n \"name\": \"agg_server_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 101,\n \"name\": \"agg_server_check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 102,\n \"name\": \"agg_check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 116,\n \"name\": \"h2_headers_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 117,\n \"name\": \"h2_data_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 118,\n \"name\": \"h2_settings_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 119,\n \"name\": \"h2_rst_stream_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 120,\n \"name\": \"h2_goaway_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 121,\n \"name\": \"h2_detected_conn_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 122,\n \"name\": \"h2_detected_strm_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 123,\n \"name\": \"h2_rst_stream_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 124,\n \"name\": \"h2_goaway_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 125,\n \"name\": \"h2_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 126,\n \"name\": \"h2_backend_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 127,\n \"name\": \"h2_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 128,\n \"name\": \"h2_backend_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 129,\n \"name\": \"h1_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 130,\n \"name\": \"h1_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 131,\n \"name\": \"h1_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3765\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 132,\n \"name\": \"h1_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3765\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 133,\n \"name\": \"h1_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 4661070\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 134,\n \"name\": \"h1_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 143070\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 135,\n \"name\": \"h1_spliced_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 3,\n \"id\": 0,\n \"field\": {\n \"pos\": 136,\n \"name\": \"h1_spliced_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-IHM\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB41_tomcat1\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1211\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 28092816\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 24317266\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1211\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1163\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 44\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1211\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 12\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 120\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 7146\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 558\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 653\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 17\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 25401\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 286985\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 1,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-IHM\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB41_tomcat2\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1211\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 28223007\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 24289689\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1211\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1170\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 36\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1211\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 102\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 7319\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 557\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 654\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 8749\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 283296\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 2,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-IHM\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB42_tomcat1\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1210\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 28567593\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 21667124\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1210\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1168\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 39\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1210\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 13\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 101\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 8624\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 568\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 642\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 16\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 5800\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 275924\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 3,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-IHM\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB42_tomcat2\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1210\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 38865031\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 26650593\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1210\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1171\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 35\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1210\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 13\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 308\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6966\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 542\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 668\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 10\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 189754\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 276231\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 4,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-IHM\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB43_tomcat1\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1209\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 28697028\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 20995655\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 33988\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 40\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1209\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1171\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 33\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1209\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 13\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 98\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6761\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 561\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 648\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 12\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 7302\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 275874\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 5,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-IHM\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB43_tomcat2\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1213\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 29405088\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 21627009\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1210\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1169\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 40\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1209\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 13\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 111\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 8429\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 571\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 642\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 10\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 11366\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 279021\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 4,\n \"id\": 6,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-IHM\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"BACKEND\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 7\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 6,\n \"name\": \"slim\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Limit\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 7527\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 181894863\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 139584782\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 10,\n \"name\": \"dreq\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 7261\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 25\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 7012\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 493\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 21\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 7527\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 7\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 51,\n \"name\": \"comp_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 52,\n \"name\": \"comp_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 53,\n \"name\": \"comp_byp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 54,\n \"name\": \"comp_rsp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 122\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 9842\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3357\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3907\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 86,\n \"name\": \"cache_lookups\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 87,\n \"name\": \"cache_hits\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 17\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 189754\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 286985\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 100,\n \"name\": \"agg_server_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 101,\n \"name\": \"agg_server_check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 102,\n \"name\": \"agg_check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 116,\n \"name\": \"h2_headers_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 117,\n \"name\": \"h2_data_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 118,\n \"name\": \"h2_settings_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 119,\n \"name\": \"h2_rst_stream_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 120,\n \"name\": \"h2_goaway_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 121,\n \"name\": \"h2_detected_conn_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 122,\n \"name\": \"h2_detected_strm_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 123,\n \"name\": \"h2_rst_stream_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 124,\n \"name\": \"h2_goaway_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 125,\n \"name\": \"h2_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 126,\n \"name\": \"h2_backend_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 127,\n \"name\": \"h2_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 128,\n \"name\": \"h2_backend_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 129,\n \"name\": \"h1_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 130,\n \"name\": \"h1_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 131,\n \"name\": \"h1_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 25940\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 132,\n \"name\": \"h1_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 29847\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 133,\n \"name\": \"h1_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 147113881\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 134,\n \"name\": \"h1_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 183368341\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 135,\n \"name\": \"h1_spliced_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 4,\n \"id\": 0,\n \"field\": {\n \"pos\": 136,\n \"name\": \"h1_spliced_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-BATCH\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB41_tomcat3\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1251\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2849646\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1965661\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1251\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1217\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 34\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1251\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 678\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 28150\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 987\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 264\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 9348\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 275377\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 1,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-BATCH\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB42_tomcat3\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1251\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2724055\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1911164\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1251\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1222\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 29\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1251\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 620\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 27330\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 973\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 278\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6084\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 138000\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 2,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-BATCH\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"DCERPWEB43_tomcat3\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1250\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2731720\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1980660\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 21,\n \"name\": \"chkfail\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1250\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 36,\n \"name\": \"check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"L7OK\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 37,\n \"name\": \"check_code\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 38,\n \"name\": \"check_duration\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Duration\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1214\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 36\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 1250\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 12\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 56,\n \"name\": \"last_chk\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 653\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 26148\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 65,\n \"name\": \"check_desc\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Output\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"Layer7 check passed\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 67,\n \"name\": \"check_rise\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 68,\n \"name\": \"check_fall\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 69,\n \"name\": \"check_health\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 985\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 265\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 10046\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 241642\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 5,\n \"id\": 3,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"APP-BATCH\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"BACKEND\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 6,\n \"name\": \"slim\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Limit\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3752\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 8305421\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 5857485\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 10,\n \"name\": \"dreq\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3752\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 4\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3653\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 99\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3752\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 51,\n \"name\": \"comp_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 52,\n \"name\": \"comp_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 53,\n \"name\": \"comp_byp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 54,\n \"name\": \"comp_rsp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 5\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 410\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 30609\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2945\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 807\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 86,\n \"name\": \"cache_lookups\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 87,\n \"name\": \"cache_hits\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 10046\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 275377\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 100,\n \"name\": \"agg_server_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 101,\n \"name\": \"agg_server_check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 102,\n \"name\": \"agg_check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 116,\n \"name\": \"h2_headers_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 117,\n \"name\": \"h2_data_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 118,\n \"name\": \"h2_settings_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 119,\n \"name\": \"h2_rst_stream_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 120,\n \"name\": \"h2_goaway_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 121,\n \"name\": \"h2_detected_conn_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 122,\n \"name\": \"h2_detected_strm_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 123,\n \"name\": \"h2_rst_stream_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 124,\n \"name\": \"h2_goaway_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 125,\n \"name\": \"h2_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 126,\n \"name\": \"h2_backend_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 127,\n \"name\": \"h2_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 128,\n \"name\": \"h2_backend_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 129,\n \"name\": \"h1_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 130,\n \"name\": \"h1_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 131,\n \"name\": \"h1_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 14236\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 132,\n \"name\": \"h1_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 15043\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 133,\n \"name\": \"h1_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9403968\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 134,\n \"name\": \"h1_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9059621\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 135,\n \"name\": \"h1_spliced_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 5,\n \"id\": 0,\n \"field\": {\n \"pos\": 136,\n \"name\": \"h1_spliced_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"STATIC_BG_IMAGE\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"NGINX_BG_IMAGE\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 22693\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2934\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"no check\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 2\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Rate\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 2048\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 90\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 88,\n \"name\": \"srv_icur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 248\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 95,\n \"name\": \"idle_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 96,\n \"name\": \"safe_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 97,\n \"name\": \"used_conn_cur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 98,\n \"name\": \"need_conn_est\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 103,\n \"name\": \"srid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Server\",\n \"proxyId\": 6,\n \"id\": 1,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ],\n [\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 0,\n \"name\": \"pxname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"STATIC_BG_IMAGE\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 1,\n \"name\": \"svname\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Name\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"BACKEND\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 2,\n \"name\": \"qcur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 3,\n \"name\": \"qmax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 4,\n \"name\": \"scur\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 5,\n \"name\": \"smax\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 6,\n \"name\": \"slim\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Limit\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 200\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 7,\n \"name\": \"stot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 8,\n \"name\": \"bin\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 22693\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 9,\n \"name\": \"bout\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 2934\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 10,\n \"name\": \"dreq\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 11,\n \"name\": \"dresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 13,\n \"name\": \"econ\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 14,\n \"name\": \"eresp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 15,\n \"name\": \"wretr\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 16,\n \"name\": \"wredis\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 17,\n \"name\": \"status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Status\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"UP\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 18,\n \"name\": \"weight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 19,\n \"name\": \"act\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 20,\n \"name\": \"bck\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 22,\n \"name\": \"chkdown\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 23,\n \"name\": \"lastchg\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 75315\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 24,\n \"name\": \"downtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 26,\n \"name\": \"pid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 27,\n \"name\": \"iid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 6\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 28,\n \"name\": \"sid\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Key\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 30,\n \"name\": \"lbtot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 32,\n \"name\": \"type\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 33,\n \"name\": \"rate\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 35,\n \"name\": \"rate_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 39,\n \"name\": \"hrsp_1xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 40,\n \"name\": \"hrsp_2xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 41,\n \"name\": \"hrsp_3xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 42,\n \"name\": \"hrsp_4xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 43,\n \"name\": \"hrsp_5xx\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 44,\n \"name\": \"hrsp_other\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 48,\n \"name\": \"req_tot\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 49,\n \"name\": \"cli_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 50,\n \"name\": \"srv_abrt\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 51,\n \"name\": \"comp_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 52,\n \"name\": \"comp_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 53,\n \"name\": \"comp_byp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 54,\n \"name\": \"comp_rsp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 55,\n \"name\": \"lastsess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Age\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"s32\",\n \"value\": 2048\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 58,\n \"name\": \"qtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 59,\n \"name\": \"ctime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 60,\n \"name\": \"rtime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 61,\n \"name\": \"ttime\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 90\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 75,\n \"name\": \"mode\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Config\",\n \"nature\": \"Gauge\",\n \"scope\": \"Service\"\n },\n \"value\": {\n \"type\": \"str\",\n \"value\": \"http\"\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 83,\n \"name\": \"wrew\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 84,\n \"name\": \"connect\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 85,\n \"name\": \"reuse\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 86,\n \"name\": \"cache_lookups\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 87,\n \"name\": \"cache_hits\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 90,\n \"name\": \"qtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 91,\n \"name\": \"ctime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 92,\n \"name\": \"rtime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 93,\n \"name\": \"ttime_max\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Max\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 248\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 94,\n \"name\": \"eint\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 99,\n \"name\": \"uweight\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Avg\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 1\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 100,\n \"name\": \"agg_server_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 101,\n \"name\": \"agg_server_check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 102,\n \"name\": \"agg_check_status\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u32\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 113,\n \"name\": \"ssl_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 114,\n \"name\": \"ssl_reused_sess\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 115,\n \"name\": \"ssl_failed_handshake\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 116,\n \"name\": \"h2_headers_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 117,\n \"name\": \"h2_data_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 118,\n \"name\": \"h2_settings_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 119,\n \"name\": \"h2_rst_stream_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 120,\n \"name\": \"h2_goaway_rcvd\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 121,\n \"name\": \"h2_detected_conn_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 122,\n \"name\": \"h2_detected_strm_protocol_errors\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 123,\n \"name\": \"h2_rst_stream_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 124,\n \"name\": \"h2_goaway_resp\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 125,\n \"name\": \"h2_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 126,\n \"name\": \"h2_backend_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 127,\n \"name\": \"h2_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 128,\n \"name\": \"h2_backend_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 129,\n \"name\": \"h1_open_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 130,\n \"name\": \"h1_open_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Gauge\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 131,\n \"name\": \"h1_total_connections\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 132,\n \"name\": \"h1_total_streams\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 9\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 133,\n \"name\": \"h1_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 3267\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 134,\n \"name\": \"h1_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 23248\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 135,\n \"name\": \"h1_spliced_bytes_in\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n },\n {\n \"objType\": \"Backend\",\n \"proxyId\": 6,\n \"id\": 0,\n \"field\": {\n \"pos\": 136,\n \"name\": \"h1_spliced_bytes_out\"\n },\n \"processNum\": 1,\n \"tags\": {\n \"origin\": \"Metric\",\n \"nature\": \"Counter\",\n \"scope\": \"Process\"\n },\n \"value\": {\n \"type\": \"u64\",\n \"value\": 0\n }\n }\n ]\n]\n", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [ + { + "key": "access-control-allow-headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + }, + { + "key": "access-control-allow-methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "access-control-allow-origin", + "value": "*" + }, + { + "key": "content-security-policy", + "value": "default-src 'none'" + }, + { + "key": "content-type", + "value": "text/html; charset=utf-8" + }, + { + "key": "x-content-type-options", + "value": "nosniff" + } + ], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 + } + ], + "rootChildren": [ + { + "type": "route", + "uuid": "843586f6-5ead-4ea3-bd48-3a4c8ec3272b" + }, + { + "type": "route", + "uuid": "bf219176-5880-47ba-b32e-b51004cc32a5" + } + ], + "proxyMode": false, + "proxyHost": "", + "proxyRemovePrefix": false, + "tlsOptions": { + "enabled": false, + "type": "CERT", + "pfxPath": "", + "certPath": "", + "keyPath": "", + "caPath": "", + "passphrase": "" + }, + "cors": true, + "headers": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], + "proxyReqHeaders": [ + { + "key": "", + "value": "" + } + ], + "proxyResHeaders": [ + { + "key": "", + "value": "" + } + ], + "data": [], + "callbacks": [] +} \ No newline at end of file diff --git a/tests/apps/podman/restapi/containerusage.robot b/tests/apps/podman/restapi/containerusage.robot new file mode 100644 index 000000000..252756525 --- /dev/null +++ b/tests/apps/podman/restapi/containerusage.robot @@ -0,0 +1,62 @@ +*** Settings *** +Documentation Test the Podman container-usage mode + +Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Start Mockoon ${MOCKOON_JSON} +Suite Teardown Stop Mockoon +Test Timeout 120s + +*** Variables *** +${MOCKOON_JSON} ${CURDIR}${/}podman.json + +${cmd} ${CENTREON_PLUGINS} +... --plugin=apps::podman::restapi::plugin +... --custommode=api +... --mode=container-usage +... --hostname=${HOSTNAME} +... --port=${APIPORT} +... --proto=http + + +*** Test Cases *** +Container usage ${tc} + [Documentation] Check the container usage + [Tags] apps podman restapi + + ${command} Catenate + ... ${cmd} + ... --container-name=wordpress + ... ${extraoptions} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc extraoptions expected_result -- + ... 1 ${EMPTY} OK: CPU: 0.11%, Memory: 10.85MB, Read : 435.65MB, Write : 941.43MB, Network in: 1006.00B, Network out: 2.10KB, State: running | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + ... 2 --warning-cpu-usage=0.1 WARNING: CPU: 0.11% | 'podman.container.cpu.usage.percent'=0.11%;0:0.1;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + ... 3 --critical-cpu-usage=0.1 CRITICAL: CPU: 0.11% | 'podman.container.cpu.usage.percent'=0.11%;;0:0.1;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + ... 4 --warning-memory-usage=10000000 WARNING: Memory: 10.85MB | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;0:10000000;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + ... 5 --critical-memory-usage=10000000 CRITICAL: Memory: 10.85MB | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;0:10000000;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + ... 6 --warning-read-io=200000000 WARNING: Read : 435.65MB | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;0:200000000;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + ... 7 --critical-read-io=400000000 CRITICAL: Read : 435.65MB | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;0:400000000;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + ... 8 --warning-write-io=500000000 WARNING: Write : 941.43MB | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;0:500000000;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + ... 9 --critical-write-io=750000000 CRITICAL: Write : 941.43MB | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;0:750000000;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + +Container usage ${tc} + [Documentation] Check the container usage + [Tags] apps podman restapi + + ${command} Catenate + ... ${cmd} + ... --container-name=wordpress + ... ${extraoptions} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc extraoptions expected_result -- + ... 10 --warning-network-in=500 WARNING: Network in: 1006.00B | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;0:500;;0; 'podman.container.network.out'=2146B;;;0; + ... 11 --critical-network-in=1000 CRITICAL: Network in: 1006.00B | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;0:1000;0; 'podman.container.network.out'=2146B;;;0; + ... 12 --warning-network-out=1000 WARNING: Network out: 2.10KB | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;0:1000;;0; + ... 13 --critical-network-out=2000 CRITICAL: Network out: 2.10KB | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;0:2000;0; + ... 14 --warning-state='\\\%{state} =~ /running/' WARNING: State: running | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; + ... 15 --critical-state='\\\%{state} =~ /running/' CRITICAL: State: running | 'podman.container.cpu.usage.percent'=0.11%;;;0;100 'podman.container.memory.usage.bytes'=11374592B;;;0; 'podman.container.io.read'=456812354B;;;0; 'podman.container.io.write'=987156423B;;;0; 'podman.container.network.in'=1006B;;;0; 'podman.container.network.out'=2146B;;;0; diff --git a/tests/apps/podman/restapi/listcontainers.robot b/tests/apps/podman/restapi/listcontainers.robot new file mode 100644 index 000000000..9226940cf --- /dev/null +++ b/tests/apps/podman/restapi/listcontainers.robot @@ -0,0 +1,36 @@ +*** Settings *** +Documentation Test the Podman list-containers mode + +Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Start Mockoon ${MOCKOON_JSON} +Suite Teardown Stop Mockoon +Test Timeout 120s + + +*** Variables *** +${MOCKOON_JSON} ${CURDIR}${/}podman.json + +${cmd} ${CENTREON_PLUGINS} +... --plugin=apps::podman::restapi::plugin +... --custommode=api +... --mode=list-containers +... --hostname=${HOSTNAME} +... --port=${APIPORT} +... --proto=http + +*** Test Cases *** +List-Containers ${tc} + [Documentation] Check list-containers results + [Tags] apps podman restapi + + ${command} Catenate + ... ${cmd} + ... ${extraoptions} + + Ctn Run Command And Check Result As Regexp ${command} ${expected_result} + + Examples: tc extraoptions expected_result -- + ... 1 ${EMPTY} ^Containers: (\\\\n\\\\[.*\\\\]){3}\\\\Z + ... 2 --disco-show \\\\<\\\\?xml version="1.0" encoding="utf-8"\\\\?\\\\>\\\\n\\\\(\\\\n\\\\s*\\\\