Commit 0bfc2fb5 authored by frank.chen's avatar frank.chen

QOwnNotes commit

parent e8917773
## 概述
因 libc.a 库版本升级导致不兼容,adx-core 无法正常编译。
## 研究 ssp-core
* 手动编译其依赖的静态库。
## 安装pip
* github上下载 20.2.4 版本。
* root 下配置 ~/.pip/pip.conf 设置清华源
```
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
```
## 安装 Fabric
- pip 安装
## 基础服务程序部署
* adx-web adx-core adx-notify 的 systemctl 脚本改变,几个程序的启动命令,参数有 prd 改为 stg。
* appstore-thrift ssp-web ssp-core 这几个是 adx-1 的镜像没有的,需要加上。
## 定时任务
## 辅助程序
- 一些 gocode
\ No newline at end of file
## 新的adx-test
* 创建 adx-user 的用户和组
* 使用root创建/data,并改变用户和组为adx-user。然后用adx-user细化 /data 里的文件夹。
* yum install git
* yum install gcc gcc-c++
* yum install autoconf automake libtool
* yum install openssl-devel
* 下载cmake,源码安装
* git 下 clone 源码。
## 家里做的
## 继续
* adx-user 添加 sudo
* 需要升级sudo,依赖新版 autoconf
* 启动 Thriftc
* 执行源码里的script/dist.sh
* 从其他机器拷贝文件,/data/appstore/cached/Ipp2.txt
* 建文件夹 /data/log/appstore-thrift
\ No newline at end of file
## 概述
- 2023-09-01 14:00 出现 adx-prd4 cpu 占用突然升高
- 新买一台 adx-web,另外,前些天,adx-core 已合并入 adx-web
- 配置为 8核16G
- 注意:改主机名,会导致主机重启
## 操作
- root 登陆,编辑 .bashrc
- groupadd adx-user && useradd -g adx-user adx-user
- 从 adx-1 拷贝 /etc/hosts 部分内容
### 安装常用
- yum install git
### golang
- wget https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz
- /etc/profile 末尾添加
```
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPROXY=https://goproxy.cn,direct
```
- root 下,编辑 ~/.bash_profile,增加内容
```
GOPATH=~/go
export GOPATH
PATH=$PATH:$HOME/bin:$GOPATH/bin
export PATH
```
### 配置ssh免密码登陆
- 为用户adx-user设置,则进入用户 adx-user
- mkdir ~/.ssh && chmod 700 ~/.ssh
- cd .ssh ,新建 authorized_keys,添加登陆机器的id_rsa.pub,
- 一般从 adx-1 的 adx-user 同文件,拷贝内容过来
- chmod 600 authorized_keys
### 业务
* 进入服务文件夹 cd /usr/lib/systemd/system/
* 参照stg服务器上,添加新的服务文件。
* root 下 mkdir /data && chown adx-user /data && chgrp adx-user /data
* adx-user 下 mkdir -p /data/adx/release
* adx-stg 上,添加 /etc/hosts 内容
* adx-stg 上,adx-web 代码中的 deploy,添加新加主机
### adx-user
- .bash_profile 末尾添加
```
GOPATH=~/go
export GOPATH
PATH=$PATH:$HOME/bin:$GOPATH/bin
export PATH
```
- .bashrc 添加内容
- golint
* git clone https://github.com/golang/lint.git
* cd lint/golint/ && go install
## cron 内容
```
::::::::::::::
/var/spool/cron/adx-user
::::::::::::::
0 12 * * * cd /data/adx/release/shell/Monitor && python logcleaner.py > /dev/null 2>&1
::::::::::::::
/var/spool/cron/root
::::::::::::::
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
::::::::::::::
/etc/cron.d/0hourly
::::::::::::::
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
::::::::::::::
/etc/cron.d/raid-check
::::::::::::::
# Run system wide raid-check once a week on Sunday at 1am by default
0 1 * * Sun root /usr/sbin/raid-check
::::::::::::::
/etc/cron.d/sysstat
::::::::::::::
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
```
\ No newline at end of file
## 概述
adx-log 和 adx-trace 需要新服务器,选用了较新的centos系统。
## 环境搭建
* yum install git
* /etc/hosts 增加 192.168.16.51 git.DT-DTG5.com
* groupadd adx-user && useradd -g adx-user adx-user
* root 用户 创建 /data 并 chgrp chown 改变所属组和用户。
* mkdir /data && chown adx-user /data && chgrp adx-user /data
* 安装 golang,配置环境
* 打开 https://golang.google.cn/dl/ 复制go的 linux tar.gz 下载链接,比如:https://golang.google.cn/dl/go1.20.2.linux-amd64.tar.gz
* 下载压缩包,解压,将解出来的go文件夹,移到 /use/local/ 路径下。
* 编辑 /etc/profile,增加内容:
PATH=/usr/local/go/bin:$PATH
export GOPROXY=https://goproxy.cn,direct
* 编辑 ~/.bash_profile,增加内容:
GOPATH=~/go
export GOPATH
PATH=$PATH:$HOME/bin:$GOPATH/bin
export PATH
* 安装 golint
* git clone https://github.com/golang/lint.git
* cd lint/golint/ && go install
* adx-user 添加到 sudo 信任列表。
* chmod u+w /etc/sudoers
* vim /etc/sudoers
* 在 root 配置那一行的下面(约文件末尾),添加一行
* adx-user ALL=(ALL) NOPASSWD: ALL
* 改完,重新设置权限,chmod u-w /etc/sudoers
* 配置ssh免密码登陆
* mkdir ~/.ssh && chmod 700 ~/.ssh
* cd .ssh ,新建 authorized_keys,添加登陆机器的id_rsa.pub
* chmod 600 authorized_keys
## 业务
* 进入服务文件夹 cd /usr/lib/systemd/system/
* 参照stg服务器上,添加新的服务文件。
* root 下 mkdir /data && chown adx-user /data && chgrp adx-user /data
* adx-user 下 mkdir -p /data/adx/release
## 基本思路
- 利用已有adx镜像来新开云主机。
- 注意 adx-1 与其他机器可能不一样。
## 步骤
* 百度云上,购买新机器,注意cpu和内存。硬盘使用adx-1的镜像。
* 观察业务程序:
* adx-web
* adx-core
* adx-notify
* shell/Monitor
* 用adx-stg执行各个模块的 fab deploy
## 购买机器
* 8核 32G
* 高性能云磁盘 80G
* 公网EIP 1m
* root 密码
* 机器名 adx-prdx adx-x (注意x代表数字编号)
## adx-stg 配置变动
* 要更新/etc/hosts
* 部署的fabfile.py里,更新配置。
## 删除老数据
* 各个模块的logs
* /home/adx-user /root 里的旧数据
## systemctl
* /usr/lib/systemd/system/
- appstore-thrift.service
- ssp-core.service
- ssp-web.service
## 监控
* 定时任务
- `/var/spool/cron/root`
```
*/15 * * * * sh /data/appstore/shell/scan-transfer-transferbmr-defend.sh
0 */1 * * * cd /data/appstore/appstore-thrift/monitor && python main.py > /dev/null 2>&1
0 18 * * 1 sh /data/appstore/shell/rm_backup.sh
0 6 * * * sh /data/appstore/shell/rmlog.sh
```
- `/var/spool/cron/adx-user`
```
0 12 * * * cd /data/adx/release/shell/Monitor && python logcleaner.py > /dev/null 2>&1
*/1 * * * * cd /data/adx/release/shell && sh observer.sh
```
## /var/spool/cron/adx-user
```
*/1 * * * * cd /data/adx/release/adx-server/bin && ./actionReport > /dev/null 2>&1
0 * * * * cd /data/adx/shell/AdxMonitor && python checker.py > /dev/null 2>&1
* */1 * * * cd /data/adx/shell/AdxMonitor && python logcleaner.py > /dev/null 2>&1
```
- actionReport 现有可执行程序,代码在adx-server,由侯莹重构,未上线。
- AdxMonitor checker.py 日志大小监控
- AdxMonitor logcleaner.py 保证只存放 2 天的广告日志文件,因 adx_log_monitor_new.sh 会做备份 bos,所以这里的 logcleaner 实际上用处不大。
## /var/spool/cron/root
```
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
#将adxlog 备份至bos,并删除本地文件
25 */1 * * * sh /data/shell/adx_log_monitor_new.sh > /data/shell/adx_log_monitor_new.sh.log
```
- adx_log_monitor_new.sh 将adxlog 备份至bos,并删除本地文件
## 通用
- nginx
- nginx 日志压缩
- /etc/logrotate.d/nginx 压缩 dmp 日志
- /etc/logrotate.d/nginx-dsp 压缩 dsp 日志
- dsp 日志,除了3点外,其他时间点做额外压缩
- `0 0,6,9,12,15,18,21 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx-dsp`
- 统计 dsp 超时率
- http://git.dt-dtg5.com/ops/proxy_status.git
- `*/10 * * * * cd /data/pycode/proxy_status && python main.py > /dev/null 2>&1`
## proxy-3
- 定时任务在 `/var/spool/cron/root`
- 统计头条dmp的预测超时率,并发送邮件。(旧)
- http://git.dt-dtg5.com/ops/proxy_dmp_analyze.git
- ` 0 8 * * * cd /var/log/nginx/analyze && nohup python main.py &`
- 统计其他dmp预测超时率
- http://git.dt-dtg5.com/ops/proxy_dmp_analyze2.git
- `0 7 * * * cd /data/proxy_dmp_analyze2 && nohup python main.py colourdata >>log.log &`
- `5 7 * * * cd /data/proxy_dmp_analyze2 && nohup python main.py samsung-proxy >>log.log &`
- dsp-notify,用于转发dsp的win和loss通知。
- http://git.dt-dtg5.com/ops/dsp-notify.git
- 服务启动 `/usr/lib/systemd/system/dsp-notify.service`
- ops-notify 统一发送邮件
- http://git.dt-dtg5.com/ops/ops-notify.git
- 服务启动 `/usr/lib/systemd/system/ops-notify.service`
- ssreader-notify
- action-report `http://git.dt-dtg5.com/t1/adx-cn.git`
- 三星阅读额外上报
- `*/1 * * * * cd /data/action-report/release && ./bin/ssreader-notify -f conf/app-prd.ini > /dev/null 2>&1`
## 概述
- 优先列出与自己模块关系紧密的任务
```
Minute Hour Day Month Week command
分钟 小时 天 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command
```
## 1. /etc/cron.daily
- logrotate 做日志压缩
- 由 ssp-cron.git 的 deploy 代码做部署
## 2. /var/spool/cron/
### root
```
0 */3 * * * sync && echo 3 > /proc/sys/vm/drop_caches
#*/1 * * * * sh /data/appstore/intime/IntimeSynch-job.sh
0 6 * * * sh /data/appstore/shell/rmlog.sh
20 6 * * * sh /data/appstore/shell/rm-bmrlog.sh
*/5 * * * * cd /data/appstore/IntimeStat/ && python main.py > /data/log/IntimeStat.log 2>&1
*/5 * * * * cd /data/appstore/IntimeStat/ && python ctr-keywords.py > /data/log/ctrKeywords.log 2>&1
*/15 * * * * sh /data/appstore/shell/scan-transfer-transferbmr-defend.sh
#每隔1分钟监控一次scan transfer 并发送告警邮件
*/1 * * * * sh /data/appstore/shell/monitor_scan_transfer.sh
00 10 * * * /usr/sbin/ntpdate -u cn.pool.ntp.org > /dev/null 2>&1; /sbin/hwclock -w
# restart nginx on the 1st and 15st of each month.
0 0 1,15 * * sh /data/appstore/nginx/restart.sh
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
```
* 说明
- drop_caches nginx-1 为3小时一次,其他机器为6小时。清理系统缓存
- IntimeSynch-job.sh 文件找不到
- rmlog.sh stg 中无此文件,删除过期的备份avro日志。
- rm-bmrlog.sh 删除过期的备份 xxxbmr 文件。
- IntimeStat nginx-1 才有。
- main.py 整理 INTIME_STAT_ALL,即 实时 ctr。
- ctr-keywords.py 整理 ssp redis 里的 ssp:ctr:keywords
- 两个脚本,会在 /data/log/ 中留执行日志。
- scan-transfer-transferbmr-defend.sh 调起某个 jar,可能日志相关。
- monitor_scan_transfer.sh 看注释为监控上面的 transferbmr。stg 无。
- restart.sh 每月1,15两天零点,重启 nginx。nginx-1 关闭该项。
## 3. /etc/cron.d/
### appstore-thrift
`1 8 * * * root python /data/appstore/shell/appstore-thrift/clean_log.py`
- stg 无。
- 删除 appstore-thrift 太老的日志文件。
- 代码有问题,日志路径不对。
### check_folder_size
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python check_folder_size.py`
- 文件和文件夹大小检查
### check_process_alive
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python check_process_alive.py`
- 关键进程检查 nginx, Thriftc, php-fpm
### monitor
- 代码放入git,http://git.DT-DTG5.com/ops/ssp-cron.git
```
*/5 * * * * root cd /data/appstore/shell/monitor/ && python UserdataServiceMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python AppStoreLogMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python ProcessAliveMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python DataMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python DiskMonitor.py > /var/log/monitor.log 2>&1
#1 17 * * * root cd /data/appstore/shell/monitor/ && python ClearLogs.py > /var/log/monitor.log 2>&1
```
- UserdataServiceMonitor 访问 http://storedatasync.ad-survey.com/healthy。
- AppStoreLogMonitor 监控 avro 日志,滞留太多会报警。
- ProcessAliveMonitor 关键进程检查,和 check_process_alive 完全重复。
- DataMonitor 监测 /data/ 文件夹大小。
- DiskMonitor 磁盘容量监测
- ClearLogs 在 nginx-1 上,功能注释了,清除一些日志文件。
### nginx-watch
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python run.py`
- nginx 进程检查,和 check_process_alive 有重复,准备删掉。
### thrift_watch
`*/1 * * * * root /usr/local/bin/thrift_watch > /var/log/thrift_watch 2>&1`
- 调用 thrift_watch(代码位于同名 c++ 项目的 Impl 文件夹内)
- 检查共享内存里的活动更新时间,如果长时间未更新,则 level 设置为 critical
```
redis.gvsdcennvpny.scs.bj.baidubce.com:6379> hgetall warn_msg:match-center:overtime
appstore-nginx5
{"level":"normal","msg":"match-center time is 2023-08-15 18:06:07","server":"appstore-nginx5","time":"2023-08-15 18:07:01"}
appstore-nginx1
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:52","server":"appstore-nginx1","time":"2023-08-15 18:07:01"}
appstore-nginx8
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:50","server":"appstore-nginx8","time":"2023-08-15 18:07:01"}
appstore-nginx2
{"level":"normal","msg":"match-center time is 2023-08-15 18:06:07","server":"appstore-nginx2","time":"2023-08-15 18:07:01"}
appstore-nginx7
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:50","server":"appstore-nginx7","time":"2023-08-15 18:07:01"}
appstore-nginx6
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:52","server":"appstore-nginx6","time":"2023-08-15 18:07:02"}
appstore-nginx9
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:50","server":"appstore-nginx9","time":"2023-08-15 18:07:01"}
appstore-nginx12
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:50","server":"appstore-nginx12","time":"2023-08-15 18:07:01"}
appstore-nginx3
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:52","server":"appstore-nginx3","time":"2023-08-15 18:07:01"}
appstore-nginx4
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:52","server":"appstore-nginx4","time":"2023-08-15 18:07:01"}
```
## 概述
- 优先列出与自己模块关系紧密的任务
```
Minute Hour Day Month Week command
分钟 小时 天 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command
```
## 1. /etc/cron.daily
- logrotate 做日志压缩
## 2. /var/spool/cron/
### root
```
#*/1 * * * * sh /data/appstore/intime/IntimeSynch-job.sh
0 */6 * * * sync && echo 3 > /proc/sys/vm/drop_caches
0 6 * * * sh /data/appstore/shell/rmlog.sh
20 6 * * * sh /data/appstore/shell/rm-bmrlog.sh
*/15 * * * * sh /data/appstore/shell/scan-transfer-transferbmr-defend.sh
#每隔1分钟监控一次scan transfer 并发送告警邮件
*/1 * * * * sh /data/appstore/shell/monitor_scan_transfer.sh
00 10 * * * /usr/sbin/ntpdate -u cn.pool.ntp.org > /dev/null 2>&1; /sbin/hwclock -w
# restart nginx on the 1st and 15st of each month.
0 0 1,15 * * sh /data/appstore/nginx/restart.sh
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
```
## 3. /etc/cron.d/
### appstore-thrift
`1 8 * * * root python /data/appstore/shell/appstore-thrift/clean_log.py`
### check_folder_size
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python check_folder_size.py`
### check_process_alive
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python check_process_alive.py`
### monitor
```
*/5 * * * * root cd /data/appstore/shell/monitor/ && python UserdataServiceMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python AppStoreLogMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python ProcessAliveMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python DataMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python DiskMonitor.py > /var/log/monitor.log 2>&1
#1 17 * * * root cd /data/appstore/shell/monitor/ && python ClearLogs.py > /var/log/monitor.log 2>&1
```
### nginx-watch
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python run.py`
### thrift_watch
`*/1 * * * * root /usr/local/bin/thrift_watch > /var/log/thrift_watch 2>&1`
## 概述
- 原打算推掉 ssp-stg,业务迁移到 adx-stg。
- 后来因系统版本差异,迁移失败,ss-stg 服务器保留。
## 代码
- gcc4.8.5 编译检查更严格,删掉部分变量
- cppjson 一些用法修改。
## 部署
- 因已存在其他业务,/data 路径权限问题,ssp nginx 的配置 nginx.conf 需做修改
- 修改 user adx-user; 原来是 nobody
## 系统
- /etc/hosts 更新,主要是加 nginx-1~12
- 整理登陆密钥
- 注意 用户 adx-user root
- 可能需要确认使用 root 来执行 ssp nginx 的部署。
## appstore-thrift
- ssp nginx 与 adx ssp-core 都存在 共享内存数据
- 共享内存数据结构不变,程序不需要移植
- ssp nginx 的 thrift 数据,代码更新一些。可考虑使用 ssp nginx 的 thrift 代码。
## 定时任务
- nginx 日志压缩先不管
### 原有 /var/spool/cron/root
```
#*/1 * * * * sh /data/appstore/intime/IntimeSynch-job.sh
0 */6 * * * sync && echo 3 > /proc/sys/vm/drop_caches
0 6 * * * sh /data/appstore/shell/rmlog.sh
0 0 * * * sh /data/appstore/shell/nginxLogRotate.sh
0 0 * * * sh /data/appstore/shell/cleanNginxHistory.py
*/15 * * * * sh /data/appstore/shell/scan-transfer-transferbmr-defend.sh
*/1 * * * * cd /data/appstore/IntimeStat/ && python main.py > /data/log/IntimeStat.log 2>&1
#*/1 * * * * cd /data/appstore/IntimeStat/ && python ctr-keywords.py > /data/log/ctrKeywords.log 2>&1
#*/2 * * * * cd /root/IntimeStat/ && python IntimeStat.py > /data/log/IntimeStat.log 2>&1
#*/2 * * * * cd /root/IntimeStat/ && python IntimeStatAll.py > /data/log/IntimeStatAll.log 2>&1
#*/5 * * * * cd /root/IntimeStat/ && python StrategyCounter.py > /data/log/StrategyCounter.log 2>&1
# restart nginx on the 1st and 15st of each month.
0 0 1,15 * * sh /data/appstore/nginx/restart.sh
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
```
- IntimeSynch-job.sh 找不到代码文件,忽略
- drop_caches 清理系统缓存,先不管
- rmlog.sh 找不到代码文件,忽略
- nginxLogRotate.sh 找不到代码文件,忽略
- cleanNginxHistory.py 找不到代码文件,忽略
- scan-transfer-transferbmr-defend.sh 大数据端的,忽略
- cd /data/appstore/IntimeStat/ && python main.py 需要迁移,先看代码
- restart.sh 之前因为内存泄漏问题,需要定期重启 nginx。现已修复内存泄漏,该任务可不执行。
## 代码与脚本
- scp 拷贝
## 部署任务代码
- scp 拷贝
## 原因
* git (1.7.1)版本低,导致 .git/config 里配置用户名+密码后,请求出错。
## 问题
- yum update git 升级不了
- 所以源码安装,但是提示缺少 msgfmt
- yum 安装 msgfmt 时,出错,猜测可能因为 centos 6.9 太老。
- 源码安装 msgfmt,发现依赖太多,弄其他依赖时,会再次出现各种错误,工作量太大,不确定因素过多。
## 方案
- 更改 yum 源为 腾讯源
- 从 nginx-test 拷贝源到有问题的机器上
- 先在 /etc/yum.repos.d 创建一个备份文件夹,备份原有配置。
- 将 nginx-test:/etc/yum.repos.d/CentOS-Base.repo 拷贝到目标机器 /etc/yum.repos.d/
- 执行 yum clean all
- 执行 yum makecache
- 更换好 yum 源后,安装 msgfmt 相关库,即执行 yum install gettext
\ No newline at end of file
## 概述
- 每双数月1号,检查报警配置。
- 云主机指标: cpu 占用率、内存占用率
- eip 带宽使用率
- redis 分片内存使用率,该项目前支持统一全体redis监控,不需要每个redis都设置一遍。
## 服务监控
- 进程存在
- 一个服务有多台机器
## 维护
- 定时脚本清理日志,释放磁盘空间
\ No newline at end of file
## 概述
- 这里是大纲,不涉及细节,看到整体即可。
### 服务器
- ssp nginx 10台
- dsp+dmp proxy 2台
- trace 2台
- huitoutiao 3台
- appstore-api 1台
## proxy
- nginx
- logrotate
- dsp超时率统计
- dmp超时率统计 (proxy-3)
- `/data/action-report` (proxy-3)
- `/data/dsp-notify` (proxy-3)
- `/data/ops-notify` (proxy-3)
- ssreader-notify (proxy-3)
## ssp nginx
- nginx
- Thriftc
## trace
- adx-cron (trace-1)
- ssp-notify
- adx-trace
## huitoutiao
- Thriftc
- ssp-core
- ssp-web
- cpt-bid
- cpt-trace
## appstore-api
- `/data/appstore-api/tools/installer_sync`
## 百度云的 access key
* AccessKey: a65a1eefc9fd464bad41465426ba4f08
* SecretKey: 3466201a31be4b479d23278e03b700ac
## redis
- key `feed:ad_rule`
- 类型为字符串
## 主体流程
- 解析请求数据
- 检查设备信息,忽略特定uid的广告请求
- 检查敏感词,忽略存在敏感词的请求
- 同时执行任务:
- 获取 dsp 广告
- 获取 rta 推荐
- 预测 转化率
- 广告筛选:
- 对广告位排序
- 按新的广告位顺序进行 广告匹配
- 对 smartswitch 做特殊处理
- 广告预测callback
- 缓存设备id信息
- dsp win loss 通知
- 匹配日志落盘
- 生成返回内容
- 返回广告给媒体
## 广告筛选
### 广告匹配-三方预测时
- 广告定向-三方预测时
- 投放 游戏类
- 投放 关联关键词的活动
- 投放 定向筛选
### 广告匹配-鹏泰预测时
- 广告定向-鹏泰预测时
- 投放 游戏类
- 投放 showType为15时,appname==keyword
- 投放 关联关键词的活动
- 投放 定向筛选-关键字完全匹配的活动
- 投放 定向筛选-关键字模糊匹配的活动
- 投放 定向筛选-剩余活动
### 定向筛选-鹏泰预测时
### 定向筛选-三方预测时
### 投放
- 对showtype 1和2 的广告位,最大投放数做特殊设置
- 计算活动价格
- 计算活动的 ecpm (注意:实际上是单次而不是千次,因为使用 下载价格 x 转化率)
- 筛选活动
- 随机排序 资源级别(100)
- 按 ecpm 排序 资源级别(5)
- 按 ecpm 排序 资源级别(4)
- 按 ecpm 排序 资源级别(3)
- 按 ecpm 排序 资源级别(2)
- 按 ecpm 排序 资源级别(1)
- 随机排序 资源级别(-1)
- 排序后,需要做 详细筛选
### 计算活动价格
- 按活动配置和关键词设置价格
- 保底:用广告位资源级别价格,无资源级别价格时,用活动本身价格。
- show type 1 和 2
- 活动未设置售卖词价格,按广告位资源级别价格。成功则退出
- 请求没有关键字时,随机选一个活动的售卖词价格。成功则退出
- 请求里的关键词,和活动的售卖词匹配时,选一个匹配到的最大价格。成功则退出
- 请求里的关键词,模糊匹配到活动售卖词时,用那个模糊匹配大关键词价格。成功则退出
- 用广告位资源级别价格。成功则退出
- 随机选一个活动的售卖词价格。成功则退出
- show type 7 和 8
- 活动未设置品牌词价格,按广告位资源级别价格。成功则退出
- 请求没有关键字时,随机选一个活动的品牌词价格。成功则退出
- 请求里的关键词,和活动的售卖词匹配时,选一个匹配到的最大价格。成功则退出
- 用广告位资源级别价格。成功则退出
- show type 其他
- 用广告位资源级别价格。成功则退出
- 按 LLM 来优化出价
- DSP 的 CPM 类广告价格转化为 CPD
### 计算 ecpm
- 走鹏泰预测时
- 获取鹏泰ctr
- 以共享内存里的数据作为保底
- 优先使用redis里的数据
- 关键词优化(优化ctr)
- 加载redis里的关键字对应的appid
- 若广告appid存在于上面的列表中,则 ctr 增加 1
- 计算 ecpm ( ctr x cpd价格)
- 额外的 ecpm 提升(一般 乘以 5)
- llm 配置的 ecpm 提升
- 走三方预测时
- 获取三方预测ctr
- 计算 ecpm
- 额外的 ecpm 提升(一般 乘以 5)
- llm 配置的 ecpm 提升
- 对351做优化
- appname匹配搜索关键词时,ecpm x 100
### 随机排序
- 逻辑较简单,不列出
### 按 ecpm 排序
- CPT 类广告为摇骰子,ecpm 大的活动,更容易被选中。
- CPD 类广告为绝对排序,ecpm 大的一定排前面。
- 同一个应用,我们的活动最优,其次 cpa 活动
- cpa 有时会根据配置,一定几率让 dsp 活动先投。
### 详细筛选
- 匀速消耗
- LLM 活动匹配
- OCPD 检查
- 价格优化
- OAID 长度判断,某些广告对 OAID 有要求
- UID 为 NoUserAgreement时的相关判定
- showtype 14时,关键词和包名,应用名的匹配
- 创意类型匹配
- 避免本次重复推送
- 行业分类
- dsp 本次最大投放检查
- dsp 价格优化
- 下载次数限制
- rta 检查
- 已安装 app 检查
- 已安装 app 检查: 星钻
- 关键词黑名单
- 关键词白名单
- 操作系统位数
## 转化率预测
- 鹏泰预测
- 比较简单,从redis加载数据即可
- 三方预测
- 构造请求数据,http post 请求预测接口
- 注意,不同合作者,接口数据可能有细微差别,这里不具体给出。
- 获取返回并解析数据
- 若上述步骤失败,则使用鹏泰预测数据
## 获取 dsp 广告
### ocpd 预测
- 只有走zzy预测时,才会做ocpd预测
## smartswitch 做特殊处理
## 辅助流程
- 更新广告素材
- 记录程序日志
\ No newline at end of file
......@@ -2,12 +2,12 @@
- 主体 nginx
- thriftc
- thrift_watch
- 整理 ctr
- 计算实时 ctr
- ssp-notify
- 接收下载安装通知
## nginx
- 接口
- 广告接口
```
/store/match
/store/impression
......@@ -18,13 +18,17 @@
```
## thriftc
- 接收广告数据,存入共享内存
- 接收匹配中心推送的广告数据,存入共享内存
## thrift_watch
- 查看共享内存中的数据
## 整理 ctr
## 计算实时 ctr
- python 脚本,由 crontab 定期执行
## 接收下载安装通知
- nginx 上以 fast-cgi 模式执行的 php 脚本
## ssp-notify
- nginx收到广告通知后,一些收尾工作转给本模块来执行。
- 收尾任务:通知广告预测合作伙伴,上报 dsp。
File added
## adx
### 新买服务器
- 包年包月、华北2、可用区B、计算型c2a
- adx-user
- mkdir ~/.ssh && chmod 700 ~/.ssh && cd .ssh
- vi authorized_keys 并 增加 adx-stg 的 pub key
- chmod 600 authorized_keys
- 拷贝 systemctl 文件
## adx-stg
- 从 adx-1 的镜像创建
- TODO 修改 systemctl 启动脚本,程序参数改为 stg 配置
- root 下 执行 pip install fabric
- 使用是出错,发现与百度云上版本不一致
- pip install six==1.10
- pip install fabric==1.14
- 增加 ssh key
- mkdir ~/.ssh && chmod 700 ~/.ssh
- 本人电脑上有 adx-user 的 key,不过拷贝到adx-stg 后,要改名
- chmod 600 id_rsa id_rsa.pub
## adx-trace
- 和 adx 一样,设置 sudo
- 和 adx 一样,设置 ssh 登陆免密
- 设置完,要使用 stg 登陆一下。避免部署业务时出现确认提示。
- 拷贝 systemctl 文件:adx-trace.service
## proxy
- yum install git && yum install nginx
- 拷贝 其他代理的 2 个nginx配置过来 nginx.conf conf.d/default.conf
## 其他
- 买完云主机后,要记得配置 安全策略,否则有可能连不上。
- 若要连redis,mysql,则需要加两种类型的白名单。
### 安装pip
- 百度云有老的 pip 安装包
- 安装时提示需要 setuptools
- 去 https://pypi.org/project/setuptools/#files 找旧版 25.2
- 下载到 setuptools 后,解压,执行 python setup.py install
- 然后再安装 pip
r.GET("/store/match", handler.GetOnlineAds_v1_Get)
r.POST("/store/match", handler.GetOnlineAds_v1_Post)
r.POST("/api/store/match", handler.GetOnlineAds)
r.GET("/sdk/match", handler.GetOnlineAds_SDK)
r.POST("/rtb/store/match", handler.GetRTBAds)
r.GET("/store/impression", handler.OnImpressionEvent)
r.GET("/sdk/impression", handler.OnImpressionEvent_SDK)
r.GET("/store/action", handler.OnActionEvent)
r.GET("/sdk/action", handler.OnActionEvent_SDK)
这个不对外公布,处理应用宝相关通知
r.GET("/yyb_track", handler.OnYYBTrack)
r.GET("/store/config", handler.GetConfig)
r.POST("/api/v0", handler.Get_Api_V0)
r.GET("store/event", handler.OnVideoEvent)
// 初始需求是,星钻这个需求,广告受众下载app时,需要从我们这边获取下载地址
r.GET("/store/adinfo/download_addres", handler.DownloadAddress)
//联盟广告app下载地址
//(NOTE 2023-06-15 经与产品确认,这个接口弃用)
// TODO 先注释掉接口,他日若无争议,再去掉相关代码
//r.GET("api/store/download_address_api", alliance.GetDownloadAddress)
//某些CPA类广告,apk存鹏泰这里,我们做了cdn加速,且做了防盗链,设置了有效期
r.GET("/apk_download", handler.APKCDNDownloadAddress)
// 隐私政策
r.StaticFS("/privacy", http.Dir("./web/privacy/"))
// 文件上传
r.GET("OnUpload", h5_deploy.OnUpload)
r.StaticFS("/h5/", http.Dir(setting.H5_DIR))
\ No newline at end of file
......@@ -2,103 +2,3 @@
- 火山云最初构建 ssp-nginx 服务器时,用了 系统盘 + 数据盘 的模式,做镜像只能做系统盘的。
- 原先的多硬盘模式,在新购机器时,若使用镜像初始化,则后续数据盘有很多工作要做。
- 考虑到数据没太多变化,所以改变为一个盘,以后新购机器,则用单盘模式,比之前要方便。
## 购机信息
- 服务器所在区,和之前一样
- 8核 | 32GB | 500GB SSD | eip 5M
- 安全组: Default、ad-debug
- 暂时不改 主机名,目前为 iv-ydnmk5nri8wh2youj1ye,待镜像做好后再改。
- 以后新购服务器后,要改 主机名。
## 购机后环境配置
### 新建用户和组
```
groupadd adminuser
useradd adminuser -g adminuser
usermod -G wheel adminuser
passwd adminuser
# sudo 免密
chmod u+w /etc/sudoers
vi /etc/sudoers #
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL
大约在这里,去掉 %wheel 前的注释
chmod u-w /etc/sudoers
su adminuser
mkdir ~/.ssh && chmod 700 ~/.ssh && cd .ssh
vi authorized_keys # 增加 stg 的 pub key
chmod 600 authorized_keys
# adminuser 的 .bashrc 增加
alias gp='git pull'
alias gf='git fetch'
alias gs='git status'
alias gl='git log'
alias xps='ps o pid,lstart,rss,user,cmd -C'
alias ll='ls -lh'
alias vmail='vim /var/spool/mail/root'
alias envcat='cat nginx_adsurvey_module/core/publish/env.h'
alias envim='vim nginx_adsurvey_module/core/publish/env.h'
```
### /data
保证几个重要路径存在
```
cd /data && mkdir appstore deploy log monitor
cd appstore && mkdir appstorelog
cd appstorelog/
mkdir action impre match
chown nobody action
chown nobody impre
chown nobody match
chgrp nobody action
chgrp nobody impre
chgrp nobody match
```
## 代码
### appstore-thrift
- `http://frank.chen:Qwer%401234@git.dt-dtg5.com/t1/appstore-thrift.git`
### thrift_watch
### ssp nginx
```
git clone http://frank.chen:Qwer%401234@git.dt-dtg5.com/t1/appstore-nginx.git release
cd release
sh configure.sh
make -j7
sudo make install
sudo /data/appstore/nginx/sbin/nginx
```
- 访问url来模拟广告请求 `180.184.26.81/store/match?uid=Yjg0OWY1ZTgxYWY5OTc3MzQ0NzRlMjhkYmE0N2Y2MmMzMzIyOTQyZGY3MzM1N2I4NTljNjU5OTdkZmJhNjRiNA==&sid=351&lan=zh&ip=109.129.40.11&nt=WiFi&dis=1080x1920&original=&db=Samsung&dt=SM-C9000&dos=33&gps=116.3912x39.906&keywords=滴滴出行&apps=&force=0&timestamp=1618304922227&vc=4.5.26.2&debug=1&imei=cchhxmeenn&oaid=9c7ba72d2f5ce06ac3fa46cd329cac2f957cb0552b505ead22a43e97e155fd58`
## 检查
### 进程存在
- php-fpm
- nginx
- Thriftc
### 日志
- nginx log,投放模块和php模块
- ad match log
- Thriftc log
## 概况
- centos 7.9
## 设置
### logrotate
......@@ -19,13 +18,13 @@
- 为了 stg 能 ssh 免密登陆过来
- 用户 home 下确保存在 .ssh,没有就创建
- mkdir ~/.ssh && chmod 700 ~/.ssh && cd .ssh
- vi authorized_keys 并 增加 adx-stg 的 pub key
- vi authorized_keys 并 增加 2 个 stg 和 一个跳转机 的 pub key
- chmod 600 authorized_keys
### git
- yum install git
- /etc/hosts 设置 git 服务器
- 添加 180.76.51.115 git.dt-dtg5.com
- 添加 101.126.82.21 git.dt-dtg5.com
- git clone adx-cn
### bashrc
......
## 概述
* 根据目前百度云上使用到的业务结构,购买少量火山云服务。
* 举例:我们有10台ssp投放服务器云主机,挂载blb后,则在火山云购买2台云主机,1个blb。
## stg 环境
* 多个业务,可以共用 stg 环境
* 云主机 8核32G 2台
* redis 4G
## ssp
* blb,1个,外网EIP 200MB
* blb,1个,内网
* 云主机 8核32G 3台
* redis 2G 存投放素材,与后端共享使用。
* redis 集群 16GB 缓存 dsp 通知 url
* redis 集群或单机 16GB 存用户数据,与后端共享使用
* kafka 一台,具体参数暂不明确。多个业务模块共用
## adx
* blb,外网EIP 200MB
* 云主机 8核32G 2台
## trace
* blb,外网EIP 200MB
* 云主机 8核32G 1台
## 测试部署目标
### 安全性权限设置
* 能通过 ssh 连接到服务器,我们的运维能配置网络权限。
* 在公司时,只要存在公网ip,即可登陆主机。
* 在家时,通过跳转机,跳转到目标主机。
### 稳定性
* 云主机,不能出现崩溃,无法访问的情况。
### 效率
* 投放服务器部署好后,我们在公司电脑上模拟请求广告,能正常返回。
* 若无三方dsp,90%的请求在200ms内返回。
* 存在三方dsp时,90%的请求在400ms内返回。
* 请求三方dsp,95%的请求在280ms内返回。
* 云主机访问redis,普通小数据,在1ms内获取到。
### 2023-06-16 问题确认
- 1 全部部署,但只有小部分业务量。可以当作最小版本
- 2 有端到服务器的,也就是分布在全国各地的手机终端。请求三方dsp时,不清楚对方服务器再哪个区域,暂时没关注过这个问题。
这个应该是云服务器自行探测最短路径吧。
- 3 目前用到百度云的blb,没看到几层负载均衡这一参数。
- 4 8核16G 32G。 4核 8G
- 5 redis 5 和 6 都有用到,无明确区分,都可以。 集群和单机都待主从,集群和单机都有用到。
我们希望空间容量,在我们业务量大时,可以扩容,在业务小时,可以降容。
mysql 需要等 后端和大数据人员确认。
- 6 当前投放端,8核32G,日常负载在CPU 45%,内存负载较低,我们大部分场景内存都比较盈余,实际上可能16G就够了。
业务大的场景比较少,可能达到cpu负载80%
- 7 大数据确认。
- 8 峰值带宽大概 10MB,不过未来可能会增加。
## 安装
- 使用 python2 的 pip 安装
- 已有部署执行代码使用较老的 Fabric 版本,暂时不打算升级,所以安装的也是叫旧的 Fabric
```
pip install six==1.10
pip install fabric==1.14
```
\ No newline at end of file
......@@ -3,3 +3,12 @@
- 需要先安装 setuptools
- adx-stg 服务器的 `/root/app` 下存在安装文件
- setuptools 和 pip 的安装,都是在路径下,执行 `sudo python setup.py install`
## 源
- root 下配置 `~/.pip/pip.conf` 设置清华源
```
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
```
\ No newline at end of file
## 细节
### PATH
### 可执行文件的 PATH
```
sudo chmod u+w /etc/sudoers
sudo vim /etc/sudoers
......@@ -7,3 +8,13 @@ sudo vim /etc/sudoers
添加路径,保存
sudo chmod u-w /etc/sudoers
```
### 免密
```
sudo chmod u+w /etc/sudoers
sudo vi /etc/sudoers
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL
大约在这里,去掉 %wheel 前的注释
chmod u-w /etc/sudoers
```
\ No newline at end of file
## systemctl
## 配置
- 服务配置路径 `/usr/lib/systemd/system/`
- 服务配置示例
......@@ -38,6 +38,9 @@ PrivateTmp=true
WantedBy=multi-user.target
```
- 设置开机启动
- 建立好服务配置后,执行 `systemctl enable ops-notify.service`
- 执行完之后,`/etc/systemd/system/multi-user.target.wants/` 路径下,会多一个链接文件
## 设置开机启动
- 建立好服务配置后,执行 `systemctl enable ops-notify.service`
- 执行完之后,`/etc/systemd/system/multi-user.target.wants/` 路径下,会多一个链接文件
## 程序输出
- 程序的标准输出在:/var/log/messages
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment