跳转至

2026 Monitoring & Logging / Security & Compliance

1 Monitoring & Logging

Prometheus & Grafana (Metrics, Alerts, Visualization)

Prometheus Basics

global:
scrape_interval: 15s

scrape_configs:
    - job_name: 'my-app'
        static_configs:
            - targets: ['localhost:9090']

Query Metrics (PromQL)

  • up → Check if a target is up
  • http_requests_total → Total HTTP requests
  • `rate(http_requests_total[5m])`` → Requests per second in the last 5 min
  • `sum by (status) (rate(http_requests_total[1m])) → Request count by status

Grafana Basics

Data Sources:

  • Prometheus → http://localhost:9090
  • Elasticsearch → http://localhost:9200

Create Dashboard & Alerts

  • Add Panel → Select metric
  • Set Alert Conditions → Thresholds, No Data, Query Errors

ELK Stack (Elasticsearch, Logstash, Kibana)

Elasticsearch Commands

Basic Index Operations

curl -X GET "localhost:9200/_cat/indices?v"
curl -X PUT "localhost:9200/my-index"
curl -X DELETE "localhost:9200/my-index"

Search & Query

curl -X GET "localhost:9200/my-index/_search?pretty"

curl -X POST "localhost:9200/my-index/_doc/1" -H "Content-Type:application/json" -d '{"name": "test"}'

Logstash Configuration

logstash.conf

input {
    file {
        path => "/var/log/syslog"
        start_position => "beginning"
    }
}

output {
    elasticsearch {
    hosts => ["localhost:9200"] 
    }
}

Kibana Basics

Useful Queries

  • message: "error" → Search for logs with "error"
  • status:[400 TO 500] → Find logs with HTTP errors

Datadog

Agent Installation & Setup

Install Agent (Linux)

DD_API_KEY=your_api_key -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"

Log Monitoring: /etc/datadog-agent/datadog.

logs_enabled: true

Metric Queries

  • avg:system.cpu.user{*} → CPU usage

  • top(avg:system.disk.used{*}, 5, 'mean') → Top 5 disk users

New Relic

For Linux Servers

curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh |
newrelic install

Query Logs & Metrics

NRQL Queries (New Relic Query Language)

SELECT average(cpuPercent) FROM SystemSample SINCE 30 minutes ago

SELECT count(*) FROM Transaction WHERE appName = 'my-app'

2 Security & Compliance

2-1 SonarQube (Code Analysis)

Start SonarQube Server

./sonar.sh start

Run analysis with Maven

mvn sonar:sonar

Run analysis with SonarScanner CLI

sonar-scanner -Dsonar.projectKey=<project-key> -Dsonar.sources=.

1. SonarQube Integration

Jenkins Integration

groovy
    pipeline {
        agent any
        environment {
            SONAR_SCANNER_HOME = tool 'SonarQubeScanner'
        }
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-repo.git'
        }
      }
    stage('SonarQube Analysis') {
        steps {
            script {
                withSonarQubeEnv('SonarQubeServer') {
                sh 'mvn sonar:sonar'
            }
        }
      }
    }
 }
}

GitLab CI/CD Integration

stages:
    - code_analysis

sonarqube_scan:
    stage: code_analysis
    image: maven:3.8.7-openjdk-17

    script:
        - mvn sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN
    variables:
        SONAR_HOST_URL: "http://sonarqube-server:9000"
        SONAR_TOKEN: "your-sonarqube-token"

GitHub Actions Integration

name: SonarQube Analysis

on:
    push:
        branches:
            - main

jobs:
    sonar_scan:
    runs-on: ubuntu-latest

steps:
    - name: Checkout Code
      uses: actions/checkout@v4

- name: Set up JDK
    uses: actions/setup-java@v3
    with:
        distribution: 'temurin'
        java-version: '17'

- name: Run SonarQube Scan
  run: mvn sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN
  env:
    SONAR_HOST_URL: "http://sonarqube-server:9000"
    SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

ArgoCD Integration (PreSync Hook)

apiVersion: batch/v1
kind: Job
metadata:
    name: sonarqube-analysis
    annotations:
        argocd.argoproj.io/hook: PreSync
spec:
    template:
        spec:
            containers:
                - name: sonar-scanner
                  image: maven:3.8.7-openjdk-17
                  command: ["mvn", "sonar:sonar"]
                  env:
                    - name: SONAR_HOST_URL
                      value: "http://sonarqube-server:9000"
                    - name: SONAR_TOKEN
                      valueFrom:
                        secretKeyRef:
                            name: sonar-secret
                            key: sonar-token
                 restartPolicy: Never

2-2. Trivy (Container Vulnerability Scanning)

Basic Commands

Scan a Docker image

trivy image <image-name>

Scan a Kubernetes cluster

trivy k8s cluster

Generate a JSON report

trivy image --format json -o report.json <image-name>

Jenkins Integration

groovy
    pipeline {
    agent any
        stages {
            stage('Checkout') {
            steps {
                git 'https://github.com/your-repo.git'
            }
        }

stage('Trivy Scan') {
    steps {
        sh 'trivy image your-docker-image:latest
        }
    }
    }
}

GitLab CI/CD Integration

stages:
    - security_scan

trivy_scan:
    stage: security_scan
    image: aquasec/trivy
    script:
        - trivy image your-docker-image:latest --format json -o trivy_report.json
artifacts:
    paths:
        - trivy_report.json

GitHub Actions Integration

name: Trivy Scan
on:
    push:
        branches:
            - main

jobs:
    trivy_scan:
        runs-on: ubuntu-latest
        steps:
            - name: Checkout Code
            uses: actions/checkout@v4

            - name: Run Trivy Scan
                run: |
                    docker pull your-docker-image:latest
                    trivy image your-docker-image:latest --format json --output trivy_report.json

            - name: Upload Trivy Report
                uses: actions/upload-artifact@v4
                with:
                    name: trivy-report
                    path: trivy_report.json

ArgoCD Integration (PreSync Hook)

apiVersion: batch/v1
kind: Job
metadata:
  name: trivy-scan
  annotations:
    argocd.argoproj.io/hook: PreSync
    argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
  template:
    spec:
      containers:
        - name: trivy-scanner
          image: aquasec/trivy:latest
          command:
            - trivy
            - image
            - your-docker-image:latest
      restartPolicy: Never

Kubernetes Integration (Admission Controller)

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: trivy-webhook

webhooks:
  - name: trivy-scan.k8s
    rules:
      - apiGroups:
          - ""
        apiVersions:
          - v1
        operations:
          - CREATE
        resources:
          - pods

    clientConfig:
      service:
        name: trivy-webhook-service
        namespace: security
        path: /validate

    admissionReviewVersions:
      - v1

    sideEffects: None

2-2 OWASP Dependency-Check (Software Dependency Analysis)

Basic Commands

Run a scan on a project

./dependency-check/bin/dependency-check.sh --scan /path/to/project

Run a scan using Maven plugin

mvn org.owasp:dependency-check-maven:check

Jekins Integration

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-repo.git'
            }
        }

        stage('OWASP Dependency Check') {
            steps {
                sh 'mvn org.owasp:dependency-check-maven:check'
            }
        }
    }
}
pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-repo.git'
            }
        }

        stage('OWASP Dependency Check') {
            steps {
                sh '''
                    mvn org.owasp:dependency-check-maven:check \
                        -DfailBuildOnCVSS=7
                '''
            }
        }
    }
}
Checkout
   ↓
Build / Dependency Analysis
   ↓
OWASP Dependency Check
   ↓
Vulnerability >= threshold?
   ├── Yes → Pipeline FAILED
   └── No  → Pipeline continues

GitLab CI/CD Integration

stages:
  - security_scan

owasp_dependency_check:
  stage: security_scan
  image: maven:3.8.7-openjdk-17

  script:
    - mvn org.owasp:dependency-check-maven:check

  artifacts:
    paths:
      - target/dependency-check-report.html
stages:
  - security_scan

owasp_dependency_check:
  stage: security_scan
  image: maven:3.8.7-openjdk-17

  script:
    - mvn org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7

  artifacts:
    when: always
    paths:
      - target/dependency-check-report.html
配置 作用
stages 定义 Pipeline 阶段
security_scan Security Scan stage
image 使用 Maven + JDK 17 的 Docker image
script 执行 OWASP Dependency-Check
-DfailBuildOnCVSS=7 CVSS ≥ 7 时让 Job 失败
artifacts 保存扫描报告
when: always 即使扫描失败,也保存报告

Github

name: OWASP Dependency Check

on:
  push:
    branches:
      - main

jobs:
  owasp_dependency_check:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Run OWASP Dependency-Check
        run: mvn org.owasp:dependency-check-maven:check

      - name: Upload OWASP Report
        uses: actions/upload-artifact@v4
        with:
          name: owasp-report
          path: target/dependency-check-report.html
Workflow
 ├── on          → 什么时候触发
 ├── jobs        → 做什么工作
 │    └── job
 │         ├── runs-on → Runner
 │         └── steps
 │              ├── checkout
 │              ├── security scan
 │              └── upload report 

Argo CD PreSync Hook Job

apiVersion: batch/v1
kind: Job
metadata:
  name: owasp-dependency-check
  annotations:
    argocd.argoproj.io/hook: PreSync

spec:
  template:
    spec:
      containers:
        - name: owasp-check
          image: maven:3.8.7-openjdk-17
          command:
            - mvn
            - org.owasp:dependency-check-maven:check

      restartPolicy: Never
apiVersion: batch/v1
kind: Job
metadata:
  name: owasp-dependency-check
  annotations:
    argocd.argoproj.io/hook: PreSync
    argocd.argoproj.io/hook-delete-policy: HookSucceeded

spec:
  backoffLimit: 0

  template:
    spec:
      containers:
        - name: owasp-check
          image: maven:3.8.7-openjdk-17
          command:
            - mvn
            - org.owasp:dependency-check-maven:check
            - -DfailBuildOnCVSS=7

      restartPolicy: Never

关键点:

  • PreSync → 在 Argo CD 正式同步应用资源之前执行。
  • command → 执行 OWASP Dependency-Check。
  • -DfailBuildOnCVSS=7 → CVSS ≥ 7 时 Job 失败。
  • Job 失败 → PreSync Hook 失败 → Argo CD Sync 失败/停止后续同步。
  • hook-delete-policy: HookSucceeded → 成功的 Hook Job 执行完后删除。