Linux操作系统标准化
系统环境标准化
系统版本
CentOS Linux release 7.4.1708 (Core)
#以测试机为例
#cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
系统环境标准化-字符集
默认设置系统字符集: en_US.utf8
#以测试机为例
# echo $LANG
en_US.utf8
系统环境标准化-内核优化
#以测试机为例
#sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv4.conf.all.promote_secondaries = 1
net.ipv4.conf.default.promote_secondaries = 1
net.ipv6.neigh.default.gc_thresh3 = 4096
net.ipv4.neigh.default.gc_thresh3 = 4096
kernel.softlockup_panic = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
kernel.numa_balancing = 0
kernel.shmmax = 68719476736
kernel.printk = 5
vm.swappiness = 5
kernel.sysrq = 1
vm.overcommit_memory = 1
vm.max_map_count = 655360
系统环境标准化-系统参数
打开文件描述符
#以测试机为例
# cat /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
root soft nofile 100001
root hard nofile 100002
* soft nproc 65536
* hard nproc 65536
系统配置标准化
系统配置标准化-yum源
- 内网所有机器指到统一内网yum源(暂无内网机房)
- 腾讯云机器使用配置的centos源
系统配置标准化-网卡配置
以腾讯云默认的配置为标准
#以测试机为例
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=dhcp
DEVICE=eth0
HWADDR=52:54:00:26:26:e4
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
系统配置标准化-dns
以腾讯云默认的配置为标准
#以测试机为例
#cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
nameserver 183.60.83.19
nameserver 183.60.82.98
系统配置标准化-主机名
- 主机名格式必须以项目缩写开头,机器作用,系统,内网ip组成
- 物理机主机名,如:zyd _主机名
- 虚拟机主机名,如:zyd_宿主机_主机名(本地测试机)
#以测试机为例
#腾讯云线上服务器
zyd_www_centos_08
#测试服务器
zyd_online_test_05
#本地测试服务器
zyd_vm45_office_test_98
系统配置标准化-selinux
腾讯云服务器默认关闭selinux
本地测试服务器:
- 系统安装完成时,修改为永久关闭disabled
- 如果未修改为disabled,则选择临时关闭(重启失效)
#以本地测试机为例
#getenforce
Disabled
系统配置标准化-firewall
腾讯云默认关闭firewall
本地测试服务器:
- 默认选择关闭
- 如有需求开启,发邮件至相关运维工作人员,进行配置
#以本地测试机为例
#systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
系统配置标准化-时间同步
腾讯云默认同步腾讯线上时间服务器
本地测试服务器:
- 内网时间服务器:192.168.10.98
- 统一配置定时任务,指向内网时间服务器
#以测试机为例
#crontab -l
#Ansible: sync time by bowen
0 0 * * * /usr/sbin/ntpdate 192.168.10.98 &>/dev/null
系统配置标准化-ssh
- 禁止root用户登陆
- 优化ssh连接过慢,dns轮询导致的问题
- 禁止空密码登陆
- 提高ssh连接速度
- 修改默认ssh端口为58000
#以测试机为例
Port 58000
PermitRootLogin no
PermitEmptyPasswords no
UseDNS no
系统配置标准化-统一目录环境
目录 | 存放内容 |
---|---|
/opt/bin | .sh/.py/.yaml文件等 |
/opt | 编译的应用程序 |
/tmp | 程序输出日志 |
/root/soft | 临时存放未编译的软件包 |
/etc/zabbix/scripts | Zabbix监控脚本存放目录 |
/etc/zabbix/zabbix_agentd.d | Zabbix监控键值配置文件存放目录 |
/opt/online | 运维拉取master代码目录 |
/opt/logs | nginx日志输出目录 |
软件部署标准化
常用软件均以打包成rpm包,可直接通过yum localinstall 进行安装
下面主要对版本,安装目录,配置文件进行一些标准化的说明
软件标准化-安装必备软件
必备软件:
vim
wget
bash-completion
lrzsz
nmap
nc
tree
htop
iftop
net-tools
软件标准化-java
#以线上环境为例
版本:
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
软件标准化-mysql
以线上环境为例
版本 | 5.6.38 |
---|---|
程序安装目录 | /opt/mysql/var |
数据库存储目录 | /opt/mysql/data |
默认端口 | 3306 |
默认错误日志目录 | /opt/mysql/logs/mysql-error.log |
默认慢日志目录 | /opt/mysql/logs/mysql-slow.log |
默认BIN-LOG | /opt/mysql/logs/mysql-bin.log |
默认编码 | utf-8 |
默认存储引擎 | InnoDB |
mysql配置文件
#主库配置文件my.cnf
[client]
socket = /tmp/mysql.sock
port = 3306
[mysqld]
basedir = /opt/mysql/var
datadir = /opt/mysql/data
port = 3306
socket = /tmp/mysql.sock
user = mysql
pid-file=/var/run/mysql/mysql-master.pid
skip-host-cache
skip-external-locking
skip-name-resolve
default-storage-engine=InnoDB
character-set-server=utf8
collation-server=utf8_general_ci
log_error = /opt/mysql/logs/mysql-error.log
long_query_time = 1
slow-query-log = 1
slow_query_log_file = /opt/mysql/logs/mysql-slow.log
expire_logs_days=7
thread_concurrency = 16
thread_cache_size = 64
key_buffer_size = 128M
max_allowed_packet = 1M
table_open_cache = 2048
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
query_cache_size = 16M
max_heap_table_size = 128M
tmp_table_size = 128M
join_buffer_size = 1024K
max_connections = 512
group_concat_max_len = 200000
low_priority_updates = 1
concurrent_insert = 2
innodb_adaptive_hash_index = 1
innodb_additional_mem_pool_size = 8MB
innodb_autoextend_increment = 8
innodb_autoinc_lock_mode = 1
innodb_buffer_pool_size = 2048MB
innodb_checksums = 0
innodb_commit_concurrency = 0
innodb_concurrency_tickets = 500
innodb_doublewrite = 1
innodb_fast_shutdown = 1
innodb_file_io_threads = 4
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0
innodb_force_recovery = 0
innodb_lock_wait_timeout = 50
innodb_locks_unsafe_for_binlog = 0
innodb_log_buffer_size = 4MB
innodb_log_file_size = 512MB
innodb_log_files_in_group = 3
innodb_log_group_home_dir = /opt/mysql/logs/innodblog
innodb_max_dirty_pages_pct = 60
innodb_max_purge_lag = 0
innodb_mirrored_log_groups = 1
innodb_open_files = 300
innodb_rollback_on_timeout = 0
innodb_stats_on_metadata = 1
innodb_support_xa = 0
innodb_sync_spin_loops = 20
innodb_table_locks = 0
innodb_thread_concurrency = 8
log-bin = mysql-bin
binlog_format = mixed
server-id = 111
log-bin = /opt/mysql/logs/mysql-bin.log
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
log-slave-updates
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO
软件标准化-memcache
libevent部署
以测试环境为例
版本 | 2.0.21 |
---|---|
安装目录 | /usr/local/libevent |
memcache部署
以测试环境为例
版本 | 1.5.8 |
---|---|
安装目录 | /usr/local/memcache |
默认端口 | 11211 |
默认监听IP | 本机host |
软件标准化-redis cluster
ruby
以测试环境为例
版本 | 2.2.3 |
---|---|
安装目录 | /root/soft/ruby-2.2.3/ |
cluser
以测试环境为例
版本 | 3.2.12 |
---|---|
安装目录 | /opt/redis |
默认端口 | 6390-6395 |
默认监听IP | 本机host |
默认日志目录 | /opt/redis/logs |
默认配置文件目录 | /opt/redis/conf |
默认数据目录 | /opt/redis/data |
默认BIN目录 | /opt/redis/bin |
默认持久化方式 | RDB |
禁用透明内存大页 | nerver |
允许内核分配所有物理内存 | vm.overcommit_memory=1 |
配置文件:
#编辑配置文件,修改对应bind,port,pidfile,cluster等路径
#修改bind(第61行,改为本机ip)
bind 172.21.32.30
#修改port(第84行)
port 6380
#修改pid文件(第150行)
pidfile /var/run/redis_6380.pid
#修改daemonize
daemonize yes
#开启集群cluster
cluster-enabled yes
#集群配置节点配置文件
cluster-config-file nodes-6380.conf
#集群超时连接时间
cluster-node-timeout 15000
#rdb文件路径
dbfilename dump-6380.rdb
软件标准化-Elasticsearch
以测试环境为例
版本 | 5.4.3 |
---|---|
安装目录 | /opt/elasticsearch |
分词器目录 | /opt/elasticsearch/plugins/ik |
默认端口 | 9200 |
默认启动用户 | elasticsearch |
开启ES跨域访问 | true |
默认存储索引片段 | true |
elasticsearch配置文件
#集群名称,默认为elasticsearch
cluster.name: es-game-test
#节点名称
node.name: node-1
#开启elasticsearch跨域访问, 默认为false
http.cors.enabled: true
#跨域访问允许的域名地址,(允许所有域名)以上使用正则
http.cors.allow-origin: "*"
###但是允许访问的域名地址为”*”是高风险的,这说明部署的ES实例允许被任何地方跨域请求。
#是否作为主节点,每个节点都会被配置成主节点,默认为trrue
node.master: true
#是否为存储数据,即存储索引片段,默认为true
node.data: true
软件标准化-nginx
以测试环境为例
版本 | 1.14.0 |
---|---|
安装目录 | /etc/nginx |
默认允许用户 | nginx |
默认端口 | 80 |
默认ACCESS日志存储目录 | /opt/logs/nginx/ |
默认ERROR日志存储目录 | /opt/logs/nginx/error.log |
默认SSL模块 | http_ssl_module |
默认STATUS模块 | http_stub_status_module |
编译安装模块
./configure \
--user=nginx \
--group=nginx \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'
nginx配置文件-日志输出
默认以json格式:
log_format json '{"@timestamp":"$time_iso8601",'
'"@version":"1",'
'"client":"$remote_addr",'
'"remote_user":"$remote_user",'
'"domain":"$host",'
'"url":"$uri",'
'"status":"$status",'
'"host":"$server_addr",'
'"request":"$request",'
'"sent_size":"$body_bytes_sent",'
'"request_body":"$request_body",'
'"request_length":"$request_length",'
'"x_forwarded":"$http_x_forwarded_for",'
'"http_uid":"$http_uid",'
'"http_appid":"$http_appid",'
'"http_bundleid":"$http_bundleID",'
'"ups_resp_time":"$upstream_response_time",'
'"responsetime":"$request_time",'
'"referer":"$http_referer",'
'"ua":"$http_user_agent",'
'"deviceName":"$http_deviceName",'
'"deviceOsVersion":"$http_deviceOsVer",'
'"deviceNetType":"$http_deviceNetType",'
'"deviceId":"$http_deviceId",'
'"carrierType":"$http_carrierType",'
'"versionName":"$http_versionName",'
'"http_channel":"$http_chanel($http_channel)",'
'"upstr_addr":"$upstream_addr",'
'"upstr_host":"$upstream_http_host"'
'}';
软件标准化-php
以测试机为例
RE2C版本 | 0.15.3 |
---|---|
BISON版本 | 3.0.4 |
LIBMCRYPT版本 | 2.5.7 |
PHP版本 | 7.2.6 |
默认安装目录 | /usr/local/php/ |
默认端口 | 9000 |
默认用户 | www |
扩展模块
以测试机为例
REDIS.SO | 3.1.2 |
---|---|
MEMCACHE.SO | |
MEMCACHED.SO | 1.0.18 |
IMAGICK.SO | 3.4.3 |
RDKAFKA.SO | |
ZOOKEEPER.SO | 0.5.0 |
默认禁用函数
disable_functions = passthru,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,checkdnsrr,checkdnsrr,getservbyname,getservbyport,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
默认编译参数
#php编译参数
./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/etc/conf.d \
--enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-soap --with-openssl --with-openssl-dir --with-pcre-regex --with-zlib --with-iconv \
--with-bz2 --enable-calendar --with-curl --with-cdb --enable-dom --enable-exif --with-pcre-dir --enable-ftp --enable-bcmath --with-gd --with-jpeg-dir \
--with-png-dir --with-freetype-dir --with-gettext --enable-ctype --with-gmp --with-mhash --enable-mbstring --with-libmbfl --with-onig --enable-pdo \
--with-pdo-mysql --with-zlib-dir --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem \
--enable-sysvshm --enable-mbregex --enable-inline-optimization --enable-wddx --with-libxml-dir --with-xsl --enable-libxml --enable-xml --enable-zip \
--enable-mysqlnd --enable-pcntl --with-mysqli --with-xmlrpc --without-pear --enable-opcache
软件标准化-you-get
以测试机为例
PYTHON版本 | 3.5.0 |
---|---|
YOUGET版本 | 最新版 |
默认安装目录 | /opt/you-get |
软件标准化-zabbix监控
以测试机为例
ZABBIX-SERVER版本 | 3.4.10 |
---|---|
ZABBIX-AGENT版本 | 3.4.10 |
默认安装目录 | /opt/zabbix |
zabbix-agent
- 安装zabbix监控所需的zabbix-agent
- 修改zabbix-agent配置文件做自动注册
- 设置开机自启动
#以测试机为例
#cat zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.10.50.27
ServerActive=10.10.50.27
Include=/etc/zabbix/zabbix_agentd.d/*.conf
系统权限标准化(初稿)
系统权限标准化-超级用户
- 线上Root权限不下放
- 如有需要使用root权限,需发邮件通知相关运维人员
系统权限标准化-普通用户
开发人员
线上环境:
- 建立日常开发用户:dev
- 不设置sudo权限
- 用户设置统一密码
测试环境:
- 可以使用root权限
- 重要文件可交由运维配置特殊权限
其他人员
- 发邮件至运维人员,提交开通用户申请
- 邮件内容包含:申请开通用户,权限等
物理机系统分区标准化
分区标准化-数据不重要
目录 | 作用 | 大小 |
---|---|---|
/boot | 引导系统分区 | 200MB-1G |
swap | 交换分区(虚拟内存)内存不够swap临时充当内存 | 内存小于8G:内存的1.5倍,内存大于8G:8G |
/ | 根分区 | 剩余多少给多少 |
分区标准化-数据重要
目录 | 作用 | 大小 |
---|---|---|
/boot | 引导系统分区 | 200MB-1G |
swap | 交换分区(虚拟内存)内存不够swap临时充当内存 | 内存小于8G:内存的1.5倍,内存大于8G:8G |
/ | 根分区 | 20G-200G |
/data | 存放数据 | 剩余多少给多少 |
分区标准化-数据不知道是否重要
/boot | 引导系统分区 | 200MB-1G |
---|---|---|
swap | 交换分区(虚拟内存)内存不够swap临时充当内存 | 内存小于8G:内存的1.5倍,内存大于8G:8G |
/ | 根分区 | 20G-200G |
剩余的空间不分区,谁来使用谁分区
虚拟机配置标准化
测试用虚拟机
同物理机系统分区标准
其他用虚拟机
按照需求发邮件通知相关运维人员进行配置
Linux运维规范
Zabbix监控规范
zabbix目录规范
以测试机为例:
ZABBIX监控脚本目录 | /etc/zabbix/scripts |
---|---|
ZABBIX键值配置文件目录 | /etc/zabbix/zabbix_agentd.d |
ZABBIX告警脚本目录 | /opt/zabbix/share/zabbix/alertscripts |
ZABBIX配置文件 | /etc/zabbix/zabbix_agentd.conf |
zabbix的key命名规范
key的命名应简洁明了,避免过多的”. ,”造成输入误操作,获取不到对应值
key的名字组成:
监控项缩写[监控的内容]
以监控ssl为例:
监控的证书到期时间
zabbix_server端获取的key为:
ssl[www.example.com]
Zabbix-告警邮件
- 默认添加administrator用户为邮件接收
- 根据业务的监控对不同的人员开通账户,接收告警邮件
- 默认接收警告~灾难级别的监控告警
- 告警邮件内容:
- 默认标题: 故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
- 消息内容:
- 告警主机:{HOSTNAME1}
- 告警时间:{EVENT.DATE} {EVENT.TIME}
- 告警等级:{TRIGGER.SEVERITY}
- 告警信息: {TRIGGER.NAME}
- 告警项目:{TRIGGER.KEY1}
- 问题详情:{ITEM.NAME}:{ITEM.VALUE}
- 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
- 事件ID:{EVENT.ID}
Zabbix-自动注册
禁用自动发现添加主机,采用zabbix自动注册添加主机
- Zabbix监控配置-动作-自动注册
- 触发条件:主机名称 如:zyd
- 操作:
- 添加主机
- 添加到主机群组:Linux servers
- 链接到模板:Template OS Linux
Zabbix-基础模板
Zabbix自动注册添加的主机,默认关联Template OS Linux 模板
模板默认触发告警信息如下
Template OS Linux模板监控项
- 默认监控项–cpu
监控项名称 | 键值 | 触发器 |
---|---|---|
Context switches per second | system.cpu.switches | |
CPU steal time | system.cpu.util[,steal] | |
CPU softirq time | system.cpu.util[,softirq] | |
CPU interrupt time | system.cpu.util[,interrupt] | |
CPU idle time | system.cpu.util[,idle] | CPU使用率大于90% |
CPU user time | system.cpu.util[,user] | |
CPU nice time | system.cpu.util[,nice] | |
CPU system time | system.cpu.util[,system] | |
CPU iowait time | system.cpu.util[,iowait] | %iowait |
Interrupts per second | Interrupts per second | |
Processor load (1 min average per core) | system.cpu.load[all,avg1] | |
Processor load (5 min average per core) | system.cpu.load[all,avg5] | |
Processor load (15 min average per core) | system.cpu.load[all,avg15] |
- 默认监控项–mem
监控项名称 | 键值 | 触发器 |
---|---|---|
Available memory | vm.memory.size[available] | vm.memory.size[available].last(0)<524284875 |
Free swap space | system.swap.size[,free] | system.swap.size[,pfree].last(0)<50 and system.swap.size[,free].last(0)<>0 |
Free swap space in % | system.swap.size[,pfree] | system.swap.size[,pfree].last(0)<50 and system.swap.size[,free].last(0)<>0 |
Total memory | vm.memory.size[total] | |
Total swap space | system.swap.size[,total] |
- 默认监控项–General
监控项名称 | 键值 | 触发器 |
---|---|---|
Host boot time | system.boottime | |
Host local time | system.localtime | |
Host name | system.hostname | system.hostname.diff(0)>0 |
System information | system.uname | |
System uptime | system.uptime |
- 默认监控项–OS
监控项名称 | 键值 | 触发器 |
---|---|---|
Maximum number of opened files | kernel.maxfiles | |
Maximum number of processes | kernel.maxproc | |
Number of logged in users | system.users.num |
- 默认监控项–Security
监控项名称 | 键值 | 触发器 |
---|---|---|
Checksum of /etc/passwd | vfs.file.cksum[/etc/passwd] | /etc/passwd被修改 |
Number of logged in users | system.users.num |
- 默认监控项–zabbix-agent
监控项名称 | 键值 | 触发器 |
---|---|---|
Agent ping | agent.ping | 5分钟内ping不通agent |
Host name of zabbix_agentd running | agent.hostname | agent名称被更改 |
Version of zabbix_agent(d) running | agent.version | agent版本被更改 |
TCP-status-11
监控项名称 | 键值 | 触发器 |
---|---|---|
CLOSE-WAIT | tcp_state[CLOSE-WAIT] | |
CLOSED | tcp_state[CLOSED] | |
CLOSING | tcp_state[CLOSING] | |
ESTABLISHED | tcp_state[ESTABLISHED] | |
FIN-WAIT1 | tcp_state[FIN-WAIT1] | |
FIN-WAIT2 | tcp_state[FIN-WAIT2] | |
LAST-ACK | tcp_state[LAST-ACK] | |
LISTEN | tcp_state[LISTEN ] | |
SYN-RECEIVED | tcp_state[SYN-RECEIVED] | |
SYN-SENT | tcp_state[SYN-SENT] | |
TIME-WAIT | tcp_state[TIME-WAIT] |
web服务器监控模板
nginx_php_port_status(nginx/php端口模板)
监控项名称 | 键值 | 触发器 |
---|---|---|
nginx_port_80 | net.tcp.listen[80] | nginx 80端口丢失 |
nginx_port_443 | net.tcp.listen[443] | nginx 443端口丢失 |
php_port_9000 | net.tcp.listen[9000] | php 9000端口丢失 |
nginx_log_status(nginx日志模板)
监控项名称 | 键值 | 触发器 |
---|---|---|
nginx日志状态码403 | nginx_log[403] | |
nginx日志状态码404 | nginx_log[404] | |
nginx日志状态码499 | nginx_log[499] | |
nginx日志状态码500 | nginx_log[500] | |
nginx日志状态码503 | nginx_log[503] |
Template Nginx Status(nginx状态模板)
监控项名称 | 键值 | 触发器 |
---|---|---|
Nginx Accepts per second | nginx[accepts] | |
Nginx Connections Active | nginx[active] | |
Nginx Connections Reading | nginx[reading] | |
Nginx Connections Waiting | nginx[waiting] | |
Nginx Connections Writing | nginx[writing] | |
Nginx Handled per second | nginx[handled] | |
Nginx Requests per second | nginx[requests] |
ssl_check(证书到期时间模板)
监控项名称 | 键值 | 触发器 |
---|---|---|
www.example.com证书 | ssl[www.example.com] | 小于60天 |
redis/memcache服务器模板
redis_cluster(redis集群状态模板)
监控项名称 | 键值 | 触发器 |
---|---|---|
redis_cluster_6390_node | redis_cluster_6390[node] | redis_cluster node不等于6 |
redis_cluster_6490_node | redis_cluster_6490[node] | redis_cluster node不等于6 |
redis_cluster_6590_node | redis_cluster_6590[node] | redis_cluster node不等于6 |
redis_cluster_6390_size | redis_cluster_6390[size] | redis cluster size 不等于3 |
redis_cluster_6490_size | redis_cluster_6490[size] | redis cluster size 不等于3 |
redis_cluster_6590_size | redis_cluster_6590[size] | redis cluster size 不等于3 |
redis_cluster_6390_slots | redis_cluster_6390[slots] | redis cluster slots不等于16384 |
redis_cluster_6490_slots | redis_cluster_6490[slots] | redis cluster slots不等于16384 |
redis_cluster_6590_slots | redis_cluster_6590[slots] | redis cluster slots不等于16384 |
memcached_stats(memcache状态模板)
监控项名称 | 键值 | 触发器 |
---|---|---|
memcache_bytes | memcached_stats[11211,bytes] | |
memcache_connections | memcached_stats[11211,curr_connections] | |
memcache_get | memcached_stats[11211,cmd_get] | |
memcache_set | memcached_stats[11211,cmd_set] | |
memcache_status | memcached_stats[11211,accepting_conns] |
es服务器模板
es_status(es端口模板)
监控项名称 | 键值 | 触发器 |
---|---|---|
es_port_9200 | net.tcp.listen[9200] | 监控端口9200 |
es_port_9300 | net.tcp.listen[9300] | 监控端口9300 |
9xiu聊天服务器模板
chat_status(端口模板)
监控项名称 | 键值 | 触发器 |
---|---|---|
chat_port_843 | net.tcp.listen[843] | 监控端口843 |
chat_port_8000 | net.tcp.listen[8000] | 监控端口8000 |
zabbix告警方式
- 邮箱告警
- 企业微信告警
除运维外,各个项目负责人也需接收zabbix告警信息
接收告警信息的触发等级为警告~灾难
相关告警的脚本见附录-zabbix监控告警脚本
Shell使用规范
shell文件命名规范
- 命名只能以英文字母,数字和下划线组成
- 避免使用linux的保留字,关键字,如true,PWD
- Shell文件名以.sh结尾,便于识别
shell风格规范
默认解释器
如:
#!/bin/bash
#!/bin/sh
#!/usr/bin/env bash
注释
脚本文件开头除了默认解释器,应标明:
- 脚本创建的时间
- 脚本的用途
- 脚本的作者
- 命令参数/函数的解释
- 脚本的注意事项
尽量以英文注释,防止乱码
如:
#!/bin/bash
#backup code every day by cgl at 20190627
# -v 详细输出模式, -z 对备份文件传输时压缩处理, -r 递归模式, -t 保持文件时间信息, -o 保持文件属主,-p 保持文件权限, -g 保持文件属组
# -e 使用ssh方式传输 -p 指定端口
# --delete 删除远端服务器没有本地端的文件
# --exclude 排除不需要传输的文件/目录
# BAK ${SERVER[@]} $i $DATE1 $WWW_DIR
rsync -vzrtopgl --progress -e 'ssh -p 58000' --exclude ".git" --delete $DIR/ $k:$WWW_DIR/ | tee -a /opt/bin/rsynclog/$DATE\.log
缩进
以n个空格进行缩进(n通常是2或4)或”\t”字符
代码上线规范(初稿)
环境说明
以为例:
目前分为3套环境
DEV(开发环境) | 本地测试虚拟机 |
---|---|
ONLINE_TEST(测试环境) | 线上测试机 |
ONLINE(线上环境) | 线上正式机器 |
代码上线
代码上线流程
- 开发人员本地测试环境下内部测试
- 开发人员合并个人分支代码到dev分支
- 通知测试人员对dev分支代码内外网测试
- 开发人员合并dev分支到test分支,并拉取到线上测试环境
- 开发人员在线上测试环境测试,无问题后,合并test分支代码到master分支,并通知运维人员上线
- 运维人员通过脚本上线,蓝绿发布分发代码
- 上线完成,检查是否有bug
- 有bug,运维切换dns解析,并回滚代码
- 无bug,代码上线完成
代码上线通知规范
代码的合并,提交,测试,由开发人员进行操作
运维只负责对代码的分发
项目负责人以邮件的形式通知运维上线,邮件内容主要包含以下几点:
- 上线的项目
- 实现的功能简介
- 注意事项,如:需要备份
- 上线的具体时间
上线完成后,运维以邮件回复上线完毕
运维代码上线脚本
见附录-运维上线脚本
代码上线流程图
蓝绿发布流程图
代码回滚
代码蓝绿发布的过程中出现问题:
- 停止对新上线版本服务器的解析,切换到老版本服务器解析
- 用备份代码进行回滚操作
- 检查回滚操作,并还原解析
日志切割规范
日志切割
nginx日志切割
以nginx日志为例:
默认使用系统自带的logrotate进行日志切割
默认使用/etc/logrorate.conf
文件,作为全局配置,而不同的应用在/etc/logrotate.d
目录下
通常以应用程序的名称命名,如:
nginx
mysql
yum等
配置文件详解:
daily #日志轮询周期
rotate 60 #保存60天数据,超过则删除
create #使用create模式创建日志文件
dateext #日志文件切割时,添加日期后缀
missingok #如果没有日志也不报错
notifempty #日志为空的时候不进行切换
compress #切割后压缩
delaycompress #切割时对上次文件进行压缩
/var/log/nginx/*.log /opt/logs/*.log { #指定日志路径
su root nginx
create 640 daemon root
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
[ -f /usr/local/php/var/run/php-fpm.pid ] && kill -USR1 `cat /usr/local/php/var/run/php-fpm.pid`
endscript
}
定时任务规范
定时任务书写规范:
- 添加注释,标明作用,时间,编写人
- 重定向,指向/dev/null 2>&1 &
以crontab编写为例:
#check node process status by cgl at 20190511
*/1 * * * * /usr/bin/sh /opt/bin/check_node.sh &> /dev/null &
妙啊
吊
秒啊