SUNBALCONY 发布的文章

ffmpeg -i $1 \
-c:v copy \
-c:a copy \
-start_number 0 \
-hls_time 5 \
-hls_list_size 0 \
-hls_segment_filename "segment_%03d.ts" \
index.m3u8


mkdir -p /data/redis/data
mkdir -p /data/redis/conf

touch /data/redis/conf/redis.conf

dir /data
port 6379
bind 0.0.0.0
requirepass sxwtz
tcp-keepalive 300
dbfilename dump_6379.rdb
appendonly yes
protected-mode no
pidfile /data/redis-6379.pid
maxmemory 2147483648

docker run -d \
--name=redis \
-p 6379:6379 \
-v /data/redis/conf:/usr/local/etc/redis \
-v /data/redis/data:/data \
redis:5.0.8 sh -c "redis-server /usr/local/etc/redis/redis.conf && echo 2000 > /proc/sys/net/core/somaxconn && echo never > /sys/kernel/mm/transparent_hugepage/enabled"

alertmanager配置部分

创建文件夹

mkdir -p /etc/alertmanager/
mkdir -p /etc/alertmanager/template

新建配置文件

vim /etc/alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m
  smtp_from: 'i@valarx.com' # 发件人
  smtp_smarthost: 'smtp.office365.com:587' # 邮箱服务器的 POP3/SMTP 主机配置 smtp.qq.com 端口为 465 或 587
  smtp_auth_username: 'i@valarx.com' # 用户名
  smtp_auth_password: 'xxxx' # 授权码 
  smtp_require_tls: true
  smtp_hello: 'xxxx'
templates:
  - '/etc/alertmanager/template/*.tmpl'
route:
  group_by: ['alertname'] # 告警分组
  group_wait: 5s # 在组内等待所配置的时间,如果同组内,5 秒内出现相同报警,在一个组内出现。
  group_interval: 5m # 如果组内内容不变化,合并为一条警报信息,5 分钟后发送。
  repeat_interval: 5m # 发送告警间隔时间 s/m/h,如果指定时间内没有修复,则重新发送告警
  receiver: 'email' # 优先使用 wechat 发送
  routes: #子路由,使用 email 发送
  - receiver: email
    match_re:
      serverity: email
receivers:
- name: 'email'
  email_configs:
  - to: 'xxx@qq.com' # 如果想发送多个人就以 ',' 做分割
    send_resolved: true
    html: '{{ template "email.html" . }}'   #使用自定义的模板发送
- name: 'wechat'
  wechat_configs:
  - corp_id: 'xxxxxxxxxxxxx' #企业 ID
    api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企业微信 api 接口 统一定义
    to_party: '2'  # 通知组 ID
    agent_id: '1000002' # 新建应用的 agent_id
    api_secret: 'xxxxxxxxxxxxxx' # 生成的 secret
    send_resolved: true

创建自定义模板

vim /etc/alertmanager/template/email.tmpl

{{ define "email.html" }}
{{ range $i, $alert :=.Alerts }}
========监控报警==========<br>
告警状态:{{   .Status }}<br>
告警级别:{{ $alert.Labels.severity }}<br>
告警类型:{{ $alert.Labels.alertname }}<br>
告警应用:{{ $alert.Annotations.summary }}<br>
告警主机:{{ $alert.Labels.instance }}<br>
告警详情:{{ $alert.Annotations.description }}<br>
触发阀值:{{ $alert.Annotations.value }}<br>
告警时间:{{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}<br>
========end=============<br>
{{ end }}
{{ end }}

启动alertmanager

docker run -d --restart=always \
--name=alertmanager \
-p 9093:9093 \
-v /etc/alertmanager:/etc/alertmanager \
-v /etc/localtime:/etc/localtime \
prom/alertmanager:latest

Prometheus部分告警规则

启用alertmanager模块和rules告警规则

global:
  scrape_interval:     5s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 5s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 10.0.4.10:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "/etc/prometheus/rules/*.rules"
  # - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.

创建rules告警规则

vim /etc/prometheus/rules/alerts.rules
这边是两个规则:
主机CPU利用率>85%
主机MEM利用率>70%

---

groups:
- name: hostStatsAlert
  rules:
  - alert: hostCpuUsageAlert
    expr: (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance))*100 > 85
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Instance {{ $labels.instance }} CPU usage high"
      description: "{{ $labels.instance }} CPU usage above 85% (current value: {{ $value }})"
  - alert: hostMemUsageAlert
    expr: (1 - (node_memory_MemAvailable_bytes{} / (node_memory_MemTotal_bytes{})))* 100 > 70
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Instance {{ $labels.instance }} MEM usage high"
      description: "{{ $labels.instance }} MEM usage above 70% (current value: {{ $value }})"

重载规则

docker restart prometheus

验证


sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  gcr.io/cadvisor/cadvisor:$VERSION

## v1 使用原生HTTP接口

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

const ASAK = "sk-xxxxxxxxxx"

type Payload struct {
    Prompt           string  `json:"prompt"`
    MaxTokens        int64   `json:"max_tokens"`
    Temperature      float64 `json:"temperature"`
    TopP             int64   `json:"top_p"`
    FrequencyPenalty int64   `json:"frequency_penalty"`
    PresencePenalty  int64   `json:"presence_penalty"`
    Model            string  `json:"model"`
}

func main() {

    data := Payload{
        Prompt:           "腾讯是一家怎样的公司",
        MaxTokens:        2048,
        Temperature:      0.5,
        TopP:             0,
        FrequencyPenalty: 0,
        PresencePenalty:  0,
        Model:            "text-davinci-003",
    }
    payloadBytes, err := json.Marshal(data)
    if err != nil {
        // handle err
    }
    body := bytes.NewReader(payloadBytes)

    req, err := http.NewRequest("POST", "https://api.openai.com/v1/completions", body)
    if err != nil {
        // handle err
    }
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", fmt.Sprintf("%s %s", "Bearer", ASAK))

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        // handle err
    }
    defer resp.Body.Close()
    all, err := io.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    fmt.Println(string(all))

}

---

# v2 使用OpenAI SDK(OpenAI教我的,你说难受不。。。。)

正在思考,请等待......

OpenAI API是OpenAI提供的一组软件API,它可以让开发人员使用自然语言处理(NLP)、机器学习(ML)和机器人技术(Robotics)等技术来开发自然语言处理(NLP)应用程序。

要使用OpenAI API,首先需要在OpenAI官网上注册一个账号,然后登录,获取API key。

然后,可以使用Go语言的第三方库OpenAI SDK来调用OpenAI API。OpenAI SDK提供了一个简单的API,可以用来访问OpenAI API。

使用OpenAI SDK,可以使用Go语言来实现一个简单的调用OpenAI API的示例:

package main

import (
    "fmt"
    "log"
    "os"
    "github.com/openai/openai-sdk-go/openai"
)

func main() {
    // 获取OpenAI API key
    apiKey := os.Getenv("OPENAI_API_KEY")

    // 创建OpenAI客户端
    client := openai.NewClient(apiKey)

    // 调用OpenAI API
    resp, err := client.Completion.Create(
        "The quick brown fox jumps over the lazy dog",
        "The quick brown fox jumps over the",
        10,
    )
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(resp)
}

上面的代码使用OpenAI SDK来调用OpenAI API,并打印出调用结果。