设为首页 收藏本站
查看: 962|回复: 0

[经验分享] 运维工具ansible+cobbler+zabbix

[复制链接]

尚未签到

发表于 2018-7-30 08:16:03 | 显示全部楼层 |阅读模式
  运维工作
  一.系统
  硬件----部署操作系统---多个主机
  如何高效的安装操作系统
  1.部署在裸机上的操作系统 bare metal
  pxe预执行环境:网卡自身有一个rom,可以自己加载来获得IP地址,能够到文件服务器上加载bootloader文件,依赖于网卡和网络预先提供的安装服务
  但是pxe只能预引导1中操作系统
  二次封装的pxe:cobbler 将多版本的操作系统环境支持 *
  【但是都需要支持pxe】
  2.虚拟机器 virtual machine *
  二.程序
  configurtion 自动完成安装程序,到配置文件的都可以完成
  puppet(ruby)所有互联网公司都在使用 *
  saltstack(python)与puppet一个作用 开发语言不同而已
  【两者都很重量级,没有达到几十上百台不能良好发挥,成本也高,门槛也高】
  所以,有了ansible,早些年的chef,cfengine等configurtion
  三.操作
  command and control:批量运行一些命令,统一命令操作工具
  fabric(python):轻量级
  func
  ansible *
  以及监控工具*
  四.程序发布(电子商城,论坛)
  1.人工智能(手动发布)
  2.脚本
  3.发布程序:公司内部研发的专门的运维程序框架
  要求:
  1.【给飞行中的飞机(双发)换发动机】
  不能影响用户体验
  2.系统不能停机
  3.不能导致系统故障或系统完全不可用
  【程序发布一般不会在访问量很多的白天进行,=并且在系统部署的时候要留有性能空间,即便停止一部分设备,剩余的也可以轻松的处理请求,所以部署的时候要预留30%左右的性能,但是又容易造成性能浪费,所以有了弹性计算】
  弹性计算:如果发现用户量很小,一批一批的而关闭主机,用户量大的时候,一批批的开启
  灰度模型:
  一次只更新一部分主机,一般在凌晨,访问量较小,将一部分的权重该为零,然后停止服务器,添加新应用,重启,改回正常的权重,然后看请求是不是正常进行,正常就依次重启
  1.基于主机做灰度
  2.基于用户做灰度
  发布路径
  在调度器上下线一批主机(标记为维护模式--软离线)---关闭服务(后端主机的服务)----部署新版本---启动服务(后端主机服务)----调度器上启动这些主机
  版本上线   应用程序发布
  问题:
  1.但是如果有回话怎么办
  一般session都是放在server上的
  【http的长连接是不超过10秒的,权重设置为0的等10秒就好了可以下线(冷模式,一定要停掉,反正已经下线了)了,有回话就等回话的最长时间】
  2.发了新版本后发现有bug怎么办
  回滚
  3.如果用户上传文件了怎么办,又不能覆盖
  一般nginx可以将用户上传的文件(静态)单独放到一个目录或服务器来,到时候软连接等就好
  五.运维工具分类
  管理主机需要拥有被管理主机的特殊权限,但是不安全,所以有了两种方式
  无agent(agentless): ansible,
  ssh,但是管理主机会有被管理主机的管理员用户账号密码,如果管理主机沦陷,后边的都有危险,于是,都创建一个基于sodu命令的用户
  agent:puppet,func
  每个主机都装一个程序,2者通过一个加密协议来进行通信,该进程由管理员的身份运行,所有命令都基于该程序运行,也就都有了被管理主机的管理员的权限
  六.ansible:能够兼具以上四种功能的工具,第二种第三种完整提供【第一种在开发,第四种要自己配置】,轻量化
  configuration
  command and control
  特性:
  高度模块化:调用特定模块完成特定任务
  基于python语言实现,paramiko pyYAML和jinja三个关键模块
  部署简单:agentless
  支持自定义模块
  支持playbook(剧本,编排) yaml格式配置文件,可自行编写,可以编排:第一步做什么,第二部做什么...*
  幂等性:一个命令执行一遍和多遍结果都一样,不回因为多次操作而变化*
  快速失败:在一个程序出错,会快速的告诉你那里出错,不用自己找*
  【ansible框架图】
  playbook(剧本,编排) yaml格式配置文件,可自行编写,可以编排:第一步做什么,第二部做什么...,调用模块进行,做什么操作就写什么
  connection plugins:连接插件,最有名的,标准,默认的是ssh
  host..:清单,被管理主机清单,那些主机被管理都要列在里边,不在的将不被ansible管理
  应用:一台ansible管理 三台被管理(2台c7,1台c6)
  【扩展:要是又多了乌班图主机呢】
  当你的被管理主机有不同版本的同一系统(c6,c7)或不同系统(centos,ubautu)的时候,你的配置文件要有条件判断,循环
  主配置文件 /etc/ansible/ansible.cfg
  hosts:主机清单文件*
  roles
  /usr/bin/ansible:主程序
  ansible-playbook:跑剧本的
  ansible-doc:查看配置文件的
  主机清单图
  hosts:[websrvs]
  IP地址【同一主机可以再多个清单中】
  [dbsrvs]
  ansible-doc -l:查看所以模块
  ansible -h:帮助
  ansible <host-pattern> [options]
  host-pattern:可以统配
  ansible all[所有主机] -m ping
  简单使用格式
  ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS
  -a 指明模块参数
  【省略模块的时候会自动调用command模块】
  -u sodoname :指明sudo用户
  例如:ansible all[所有主机] -m ping
  ansible具体模块
  查看所以模块
  ansible-doc -l
  模块文件查找路径,在主配置文件中查找
  查看模块使用方法
  ansible-doc -s MOD_NAME
  例如 ansible-doc -s ping
  帮助
  ansible[-doc|-playbook] -h
  1.command:远程主机上运行名令
  ansible  HOST-PATTERN  -m command  -a ‘命令’
  不支持管道功能以及一些shell特性
  2.shell:远程主机上执行命令,调用一个shell进程,命令是shell子进程执行
  ansible  HOST-PATTERN  -m shell  -a  ’命令‘
  支持管道等shell特性的命令
  3.copy:把文件复制到制定的远程节点位置
  ansible  HOST-PATTERN  -m copy  -a  MOD_ARGS
  [带=的表示必须要带的参数]
  格式:args=
  src:那个文件|目录发送到远程主机
  dest=:复制到远程主机的什么位置,必须是绝对路径,不存在创建,已存在覆盖,规则同cp
  content:自己写要发送什么到远程主机
  dest=
  mode:指明文件在目标主机上的权限
  owner:属主属组指明
  4.cron
  ansible  HOST-PATTERN  -m cron  -a  MOD_ARGS
  name=:指明任务名字,必须写
  state:创建还是删除cron任务,创建present,删除absent
  minute= */#:没几分钟,基本上规则等于cron的配置文件中的规则,#;每小时的第几中做什么
  hour,day,mouth,weekday,reboot
  job=:那个时间做什么
  5.fetch:从远程主机上拉取文件
  ansible  HOST-PATTERN  -m fetch  -a  MOD_ARGS
  src= 目标的存放位置,可以使目录或者是文件
  dest= 拉取过来的文件存放的位置,只能是目录
  通常上是讲从一个节点上fetch,除非是一个目录
  6.file:设定文件属性,什么属主属组啊之类的
  ansible  HOST-PATTERN  -m file  -a  MOD_ARGS
  (1).path=:指明文件路径,比给参数
  src:源文件
  state:directory
  例:ansible all -m file -a "src=/tmp/fstab path=/tmp/fstab.link state=link"
  (2).path=file group= owner= mode=
  修改文件属性
  (3).path= state=directory
  创建目录
  7. hostname
  ansible  HOST-PATTERN  -m hostname  -a  MOD_ARGS
  name=:主机不同命,可以用循环或者是变量
  8.mysql_db:在远程数据库上添加数据库
  9.pip:让远程主机的python环境自动安装python依赖的模块等
  10.yum:基于yum管理程序包(要求远程主机支持yum)
  ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS
  name=:包名,可以带版本号
  state:present 安装最新版本
  latest
  absent 删除
  11.service:管理服务
  ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS
  name=:必给
  state:started|stopped restarted
  enabled:是不是开机自动启动
  runlevel:那几个级别开机启动,默认2345
  12.uri:想指明的每个web服务器请求个uri
  ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS
  url=:url完整格式,通常用变量
  user,password
  13.user:管理 用户|组 账号
  ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS
  name=:
  state:present
  latest
  absent
  system:是不是系统账号yes|no
  uid
  group:基本组
  groups:附加组
  shell
  home
  move_home:移动家目录
  remove:删除用户的时候同时删除用户的家目录
  14.group:管理组
  ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS
  name=:必给的,组名
  state:
  system:
  gid:
  15.scripts模块:执行脚本的,本地路径上的脚本,自动复制道远程主机上在进行执行
  ansible  HOST-PATTERN  -m MOD_NAME  -a “/path/to/script_file"
  用法很像shell和command
  YAML:数据结构描述格式【key value】清单,散列表,标量
  多个key:value在一起叫散列表,就是字典
  例如 { name:"user11",group:"group11"}
  house:
  family:
  name: Doe
  parents:
  - John
  - Jane
  children:
  - Paul
  age:17
  aa:16
  - Mark
  - Simone
  address:
  number: 34
  street: Main Street
  city: Nowheretown
  zipcode: 12345
  上边整体都可以叫做一个字典,因为是多个键值对组成的,address和family也是字典,parents就是列表
  列表children中,其中一个值又是一个字典
  一个键多个值,值是列表,列表的值前边要有-
  例如 packages:
  -httpd
  -php
  -php-mysql
  【可以嵌套】
  family:
  name: Doe
  parents:
  - John
  - Jane
  children:
  - Paul
  - Mark
  - Simone
  family是一个键,他的值是嵌套的一个键值对,一个列表,而且,本身family就是一个字典
  【.yaml|.yml结尾】
  playbook 核心元素
  Hosts:
  Tasks:任务,模块加参数
  Vsrisble:变量 [自带|自定义]
  Templates:模板,包含了模板语法的文本文件
  handlers:处理器,在特定条件下才会被触发的任务,本质上还是Tasks
  举例,一个playbook定义了安装程序,提供配置文件,启动服务三个步骤,当配置文件变化的时候,由于幂等性的原因,ansible发现程序安装了,就不会在安装了,发现配置文件变了,会重新传一份新配置文件,发现服务启动了,就不会在启动一遍服务了,所以,这个时候的新的配置文件是不会生效的,因为playbook之定义了启动服务,这个时候就需要handlers来设定,一旦发现配置文件有变化立马重启服务(|重读配置文件)使配置文件生效
  Roles:角色,由以上元素组成的特定结构
  playbook的基础组件
  *1.hosts:运行指定任务的目标主机;可以是一个或多个以:分割的主机,但是要事先在配置文件定义
  2.remote_user:在远程主机上执行任务的用户,可以是一个全局用户,也可以单任务指定
  3.sudo_user:以sudo的方式运行时,于哪个用户运行,某些场景的可选用户
  *4.tasks:任务列表,第一个任务在三台主机运行完,再将第二个运行三台主机,一旦有一个主机运行出问题,会终止,修改好后在运行,不会影响之前运行
  过的主机
  模块,模块参数
  格式:
  1.action:module arguments(仅新版支持)
  2.module:arguments(所有版本都支持)
  command|shell:命令
  其余的都严格遵循key=value
  【每一个任务都要有个名字,以便于出错了给你报名字name:taskname】
  某任务的状态字运行后为change时,可以通过notify来通知
  任务可以通过tags打标签,可在ansible-playbook命令使用标签-t,多个用:或空白隔开
  图片示例
  ansible-playbook /path/to/file option
  -v:详细信息
  --list-hosts:只输出主机列表,不执行任何命令
  --check:只测试不执行
  -t tags :指明那个标签上边的用户
  -e VARS:命令行传导参数项,就是想awk -v一样在命令行定义变量
  -s:以sudo的方式运行
  运行结果图
  ok=#:主机上有几个成功执行的任务
  changed=#:有几个是通过修改以后完成的
  unreachable=#:有几个主机联系不到的
  failed=#失败的个数
  主机的facts变量:手机远程主机的facts 变量,在每次运行playbook之前都会自动运行
  手动:ansible all -m setup -a facts
  手动执行就可以看见目标主机的所有变量了
  运行playbook的方式
  1.测试
  ansible-playbook --check file.yml
  只测试运行结果,不真正的执行
  ansible-playbook --list-hosts
  列出运行的主机
  2.运行
  ansible-playbook /path/to/file
  handlers:在特定条件下触发,在关注的资源发生改变的时候触发,或接受到通知时触发
  经常在某任务的状态在运行后为changed的时候使用notify的方式通知处理器
  使用方法:那配置文件来举例
  在更改配置文件的task(被更改的任务)的下面,加上
  notify:handler_name,
  然后在这个列表结束后加上
  handler:
  -name:handler_name
  动作
  要求就是notify和handler的handler_name必须是一致的
  -hosts:192.168.1.101
  remote_user:root
  tasks:
  -name:install httpd
  yum:name=httpd state=present
  -name:configure
  copy:src=file dest=hosts/path/to/dir
  notify:restart httpd
  -name:start httpd
  service:name=httpd state=started
  handler:
  -name:restart httpd
  service:name=httpd state=restart
  直接写在hosts栏的后方
  【主要处理正常流程下,没有关系的资源,给他们创建练习来工作】
  tags:加个标签,结合-t
  ansible-playbook -t TAGS_NAME1,TAGS_NAME2,.... file
  只执行有标签的任务,当然,前提是先在指定的任务下边加上
  tags:tags_name
  然后就可以用了,可以给多个任务打标签,同一个任务也可以有多个标签,两个任务的标签可以一样,-t后边也可有多个标签,用逗号或空白隔开就好
  variables:变量 只能以字母开头,使用` value `调用变量 注意空格
  1.facts:setup模块提供,可直接调用
  2.使用ansible-playbook的命名传递 -e
  ...-e “var=value”,想awk -v一样,可以定义多个变量,使用多个-e就好
  3.通过roles传递变量
  4.Host Inventiry
  想不通的主机传递不同的变量,可以加上端口号
  IP地址1/HOSTNAME1[:port] var=value
  IP地址2/HOSTNAME2[:port] var2=value2
  向组中主机传递相同变量
  在hosts文件中的组后边加上
  [组名:vars]
  var=value
  例如[websrvs:vars]
  http_port:8080
  5.计算
  变量可以进行计算,包括下边的template的时候也做过
  直接在花括号中写入变量参与的表达式
  例如` ansible_processor_vapus-1 `
  Inventiry参数:
  定义ansible远程连接目标主机时使用的参数,而不是传递给playbook的变量
  要注意区分
  ansible_ssh_host
  port
  user
  pass:密码
  ansible_sudo_pass:密码
  templates:模板
  文本文件,内部嵌套脚本,使用模板编程语言编写的脚本
  python:嵌入式模板编程语言jinja2
  字面量:常见的就是字符串 用"" ''引用;
  数字:整数,浮点数;
  列表:[item1,item2...]可变;
  元组: (item1,item2..)不可变;
  字典:{"key1":value1,"key2":value2....};
  算术运算:+ ,- ,* ,/ ,//(不要余数只留商), %,**;
  比较操作:==,!=,>,>=,<,<=;
  逻辑运算:and,or,not
  迭代,条件判断
  template模块:基于模板方式生成一个文件复制到远程主机
  ansible  HOST-PATTERN  -m template  -a  MOD_ARGS
  src=:要指明本地的jinja2的模板文件路径.j2结尾
  dest=:远程主机上用于运用的路径,通常是绝对路径
  owner
  group
  mode
  上边是命令行的template模块使用方法,下面是写入到配置文件.yml中的方法
  就是在tasks下边记上
  template:src=xxx.jinja2 dest=xxxx
  用法和以前的没什么不同,还可以用tags和notify(handler)
  写好用ansible-playbook file.yml就好了
  playbook的条件测试:
  when语句:在task中使用,jinja2的语法格式
  when:ansible_distrubtion == "7"
  - name: install conf file to centos7
  template: src=files/nginx.conf.c7.j2
  when: ansible_distribution_major_version == "7"
  - name: install conf file to centos6
  template: src=files/nginx.conf.c6.j2
  when: ansible_distribution_major_version == "6"
  循环:迭代,需要重复执行的任务;
  对迭代项的引用,固定变量名为“item”,要在task中使用with_items给定要迭代的元素列表;
  列表方法:
  字符串
  字典
  -name:install some package
  yum:name=` item ` state=present
  with_items:
  -nginx
  -memcached
  -php-fpm
  -name:groups
  group:` item ` state=present
  with_items
  - group11
  - group12
  - group13
  -name:add some user
  user:name=` item ` group=` item `
  with_items
  -{ name:"user11",group:"group11"}
  -{ name:"user11",group:"group11"}
  -{ name:"user11",group:"group11"}
  角色(roles)
  角色就像一个目录,有个roles的总目录,地下是好多的角色名命名的子目录
  /etc/ansible/roles/ 具体位置可以定义.cfg
  每个角色以特定的曾级目录结构进行组织
  例如 mysql/
  files/      存放copy或script模块调用的文件
  templates/   存放template模块查找模板的文件
  tasks/      必须有的目录,至少包含一个main.yml的文件;其余的.yml都是要借用main.yml加载,要在main.yml中以include包含
  handlers/   至少包含一个main.yml的文件,规则同上,handler
  vars/      var中也至少有一个main.yml文件,规则同上,存放变量
  meta/  至少一个main.yml,规则同上,定义当前角色的特殊设定及依赖关系
  default/ 设定默认变量时使用此目录中的main.yml
  角色只能用自己目录下的子目录或文件,所以,子目录要有这些模块要用到的文件或子目录
  在playbook调用角色
  -hosts:websvrs
  remote_user:root
  roles:
  -mysql
  -memcached
  -nginx
  启动起来后,ansible会自动的跑到这几个角色的目录下,将他目录下的子目录中的所有代码跑一边
  创建角色:
  1.在roles中创建角色同名目录
  mkdir -pv nginx
  创建子目录
  mkdir -pv nginx/{...}
  2.将需要的文件放进去(main.yml)
  编辑main.yml
  一些任务,但是任务中要用到同目录下的文件时候,直接写文件名就好,不用写路径,会自己去找的,实例参见配图templates项,好比我现在是在task下编辑main.yml,我想调用files下的文件,并不需要写什么局对路径相对路径,直接写文件名字,他会自己去找
  对于一个角色,最重要的是任务,所以先编辑tasks,格式很多都可以省略,比如hosts,这个是让人调用的角色所以不能指定hosts,比如tasks,这个是可以省略的,因为本身就是在task目录下了
  但是,要区分主要运行的剧本和这里的main.yml也好自己定义的其他名字的yml也好,都是不同的,playbook要运行的剧本老老实实的写hosts和tasks等
  handler也是,在handlers的目录下写main.yml,在要运行的yml中只写notify就好了
  在playbook中使用变量,在运行的yml中,remote_user的下边加上
  var:value
  就可以直接调用了,多个可以使用列表,但是,每次要修改变量还要去到配置文件中去修改配置文件,不过,ansible可以再命令行设置变量,并且优先级还要高于配置文件中的变量
  ansible-playbook -e var=value2  file.yml
  实际上的var的值是value2
  在角色中更贱简单,在ansible的rules下的相关角色的vars目录下编辑main.yml,然后直接在运行的里边使用就好,只要是字典格式就好,不要加-
  或者是在角色调用的时候来实现传递变量
  Roles:
  -{ role:nginx,username:mymy }
  把角色那一栏做成字典,第一蓝是角色,后边是变量
  还可以在角色调用还可以做条件判断
  Roles:
  -{ role:nginx,when:xxxxxx == "7" }
  只有满足什么条件的时候才会调用角色
  实战作业:1.两台主机nginx+keepalived   主从模式,主主更好,制作好ansible角色
  2.后端两台主机跑php,lap,
  3.再有一台主机跑mysql
  注意:写角色要判断操作系统,nginx,mysql的安装包都不同,还有apache也不是很一样
  部署一个论坛程序更好
  顺便博客作业,把ansible内容写上
  ansible如何基于sudo使用,建议把使用sudo的组加到wheel组中
  www.ansible.com.cn
  cobbler服务依赖于pxe
  pxe依赖于dhcp,ftp等服务
  DHCP服务:动态主机配置协议
  IP/MASK:mask与自己和对方的ip做与运算,计算是不是同一网段
  gateway
  DNS:第一台是最重要的,第一台不可用(而非解析不了)才用第二台
  wins server, ntp server
  参数的配置方式:
  静态方式指定
  动态配置分配:
  bootp:boot protocol无盘工作站
  无盘工作站:后端有服务器,上边有多个独立空间给子机存储文件,还有一个单独的空间存放模板,基于tcp/ip协议通信,但是往往刚装的时候没有系统怎么配置IP地址呢
  有一个基于网卡级别的服务来自动配置,类似于只能网卡,在局域网中广播,让服务来给自己配置IP地址,然后在对文件服务器通信
  boot协议:一旦分配出去,就不会在收回,除非重新配置
  但是现在的都是有盘计算机,不需要再去服务器读系统,所以直接去拿地址就好
  dhcp:有一个地址池,里边有一段连续的IP地址,有自己独立的DNS和网关,计算机关机后自动回收
  引入租约(使用时间)的bootp,也可以为实现为特定主机保留某固定的IP地址(MAC地址来识别,从而实现保留固定地址)
  rarp:反向arp,将MAC地址解析为ip地址
  arp:ip地址解析协议,将ip解析为MAC地址
  监听端口:服务端udp67   客户端udp68
  客户端监听是因为二者之间是要进行通信的
  实现程序:dhcp(重量级)
  dnsmasq(同时提供dns请求转发和dhcp功能)
  工作流程    客户端广播发现服务器端(discover阶段)
  服务器端offer,提供一个地址(offer阶段)
  多个服务器提供offer的时候,用最先到达的那个,应为最先证明他的性能好
  客户端收到后,请求使用此地址(request阶段)
  发送了request,也就告诉了所有的服务器端我选择了那个,其他的服务器就可以把IP地址返回地址池,而选定的服务器就要把IP地址从地址池删除
  服务器端同意(ack阶段)
  可以使用,结束通信
  报文:广播,广播是不能跨越网关的,只能在局域网中进行,但是可以中继,配置一个路由器做dhcp服务器的中继器
  使用路由器监听在udp67端口,路由器将广播中继成到dhcp服务器的单播,然后收到的单播传递到另一个局域网广播
  但是想要管理别人的局域网,要想将自己的局域网管理好了
  续租:提前续租,续租成功的时候,再延长一个租期,但是如果续租的时候联系不上服务器,可以缓一段时间再去找服务器续租,如果总是联系不上,就准备重新discover计算
  50%:第一次续租 75% 87.5%
  额外功能:可以区分系统(Windows,非Windows)配置不同的地址池,可以区分是不是虚拟机等
  如何配置使用dhcp服务
  dhcp:只提供dhcp服务
  dnsmasq:还能提供dns服务
  dhcp:
  dhcpd:服务器
  dhcrelay:dhcp中继器
  融合在一起,所以服务叫dhcp,但是中继和正常的dhcpd不能一起进行,因为都是监听在67端口的
  dhcpd:因为他是要给别人分配地址的,所以自己也要有地址,而且要是静态分配的地址,不能发生变化
  配置文件:/etc/dhcp/dhcpd.conf
  空的,要cp dhcpd.conf.example到这里覆盖
  dhcpd.service dhcpd6.service dhcrelay
  dhcpd.leases:租约,每个地址的租约都放在里边,分配出去的地址的信息也都在里边
  配置:
  参数类配置:配置客户端的
  指令类配置:配置自己的工作配置
  option domain-name "example.org";
  搜索域
  option domain-name-servers dns server1, dns server2;dns server3;
  dns服务器
  default-lease-time 600;
  默认租约时长  单位:秒
  max-lease-time 7200;
  最长租约时长
  [时间长好还是时间短好呢,长好,关机就释放,所以长了没关系,但是短了每个一段时间就要广播,增加了服务器压力]
  log-facility local7;
  日志记录[要去rsyslog配置local7]
  subnet 172.16.0.0 netmask 255.255.255.0 {
  range 172.16.100.1 172.16.100.99;
  分配的地址池
  option routers 172.16.0.1;
  配置网关的,后边指明真正的gw
  filename:指明引导文件名称
  next-server:指明引导文件的服务器地址
  }
  管理的子网地址;不管配置几个地址,首先都要先有一个自己网络的
  filename:表示只对网段中的主机查找引导,而且只在刚分配完后的短时间内生效,其他时间不生效
  [options有范围限制的,范围越小会越有限生效]
  host HOST_ID {
  hardware Ethernet MAC地址;
  fixed-address IP;
  option....
  }
  固定IP地址,这个ip不能出现在上边的地址池,另外HOS_ID只是个标示,不一定与主机名一致,但是要能标示
  其他配置
  filename:指明引导文件名称
  next-server:指明引导文件的服务器地址
  例子:filename "pxelinux 0";
  next-server 172.16.0.1;
  但是这个是对网卡有特殊要求的,要求网卡有tftp协议,简单文件传输服务
  怎么指明使用哪个dhcp服务
  先关掉vm的dhcp服务,停止dhcp服务的虚拟机桥接,改成仅主机
  再来一台仅主机的虚拟机 dhclient -d 追踪分配地址
  再次启动的时候,先默认发送一个续租请求(使用了固定地址后,固定地址优先级比请求高,会使用固定地址)
  pxe:提供操作系统的技术,网络引导技术,自动化的方式完成操作系统的安装   intel牵头研发的技术,硬件级别(芯片级别)
  必须网卡内置了pxe支持才行,在今天网卡都默认支持,而且虚拟机也支持pxe引导了
  我们通常那他进行操作系统安装
  CentOS系如何配置实现pxe:
  硬件支持
  dhcp server:配置ip 掩码 dns gw等;filename,next-server
  tftp server:加载bootloader和kernel,initrd
  yum repository:ftp,http,nfs提供安装树
  kickstart:完成自动化安装
  tftp server :类似于ftp但是监听在udp69端口
  c/s:tftp-server
  tftp
  /usr/sbin/in.tftpd
  启动的服务文件:瞬时守护进程
  /usr/lib/systemd/system/tftp.socket
  非守护进程
  /usr/lib/systemd/system/tftp.service
  根目录
  /var/lib/tftpboot
  配置文件
  /etc/xinetd.d/tftp
  centos6:
  chkconfig tftp on
  service xinetd restart
  centos7:
  systemctl enable tftp
  systemctl start tftp
  dhcp server:配置range filename next-server
  安装httpd vsftpd syslinux(提供各种引导文件)
  测试环境192.168.12.0/24
  服务器192.168.12.1/24
  cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
  挂载光盘 挂载到/var/www/html/centos7
  cp vmlinuz initrd.img /var/lib/tftpboot
  cp /usr/share/syslinux/{mboot.c32,menu.c32,memdisk,chain.c32} /var/lib/tftpboot
  在/var/lib/tftpboot中创建目录
  mkdir pxelinux.cfg目录
  创建default文件
  default menu.c32  那个生成菜单的
  prompt # 菜单显示时间
  timeout # 超时时间

  MENU>  LABEL linux 短格式显示菜单
  MENU LABEL install Centos7
  KERNEL vmlinux 在哪个加载内核
  APPEND initrd(参数名)=initrd.img文件名 install.repo=ftp://192.168.12.1/pub/centos/$re...仓库名
  LABEL linux_autoinstall
  MENU LABEL install c7 auto
  KERNEL vmlinux
  APPEND initrd=initrd.img install.repo=ftp://192.168.12.1/pub/centos[/$re...](仓库名) ks=ftp://192.168.12.1/pub/kickstart.cfg[注意文件的权限问题,ks权限没有r的话无读取]
  记得先把ks文件放到/var/www/html下,要用http访问
  另一个主机设置成从网路引导
  dos--boot-network的第一项
  boot:linux  调用第一项
  这么调用可以再后边添加一些选项,比如加上ks=....就和第二项一样了
  [本地就有一个ks文件 anaconda-ks.cfg,手动安装时生成的]
  [ks文件语法检查工具ksvalidator]
  centos6:前边一样,后边的菜单方式不太一样,可以使用centos6自带的图形工具生成
  挂载光盘 挂载到/var/www/html/centos6
  复制vmlinuz,initrd.img
  复制isolinux下的boot.msg vesamenu.c32 splash.jpg
  mkdir -pv /var/lib/tftpboot/pexlinux.cfg/
  cp -v isolinux/isolinux.cfg /var/lib/tftpboot/pexlinux.cfg/default
  vesa:使用boot调用,采用图形安装
  menu default:默认项,只能有一个
  ks之类的还是加载append后边
  但是install.repo不用指明,系统会自动加载的
  ks要放到/var/www/html下边,而且要给上读权限r
  cobbler:配置多系统版本安装环境
  cloud or VM:image lanch
  VM:
  第一台是安装出来,后边可以镜像
  云OS:
  将影像文件下载到节点上,以此为硬盘来安装
  Bare Metal:OS Install
  只能是安装,但是可以借助工具自动批量安装
  基本上第一次都是安装的,或者是下载网上别人分享的镜像文件
  基本上所有工具都是基于pxe,cobbler当然也不例外
  cobbler:
  PXE
  Koan
  核心概念:cobbler(核心)
  cobbler_web(补充组件,增进用户体验,提升管理效率)
  distros:定义发行版
  profiles:基于distros,配合ks,安装不同的部署环境(主机只使用一个服务,如mysql专机)
  systems:即便是同一个profile,也是有不一样的地方,比如ip等,这些就叫system,但是很少进行精细管理
  repos:yum仓库,发行版,epel(但是不能拿来安装)
  images:镜像文件

  management>  file resources:文件管理
  常用的只有 distros profile
  需要服务:
  TFTP
  rsync
  DHCP
  DNS
  子命令:
  import
  sync
  cobbler图解
  distribution:
  KERNEL
  initrd
  profile:
  distribution
  ks file
  repository
  system:
  profile,IP,MAC
  安装:yum安装或编译,epel源
  配置文件:/etc/cobbler
  服务:cobblerd.service
  (运行cobbler之前要强依赖httpd,所以先开启httpd,还有tftp,rsync)
  帮助
  cobbler [command] --help
  检测cobbler环境是不是完备
  cobbler check
  解决check问题
  编辑cobbler/settings
  1.server 127....改掉
  2.next_server 172.16.100.7 本机地址
  3.default_passwd_crypted:"密码"
  chkconfig tftp on
  loader不用管可以,syslinux提供的就够
  chkconfig rsync on   监听873tcp端口
  debmirror c7不用,c6需要
  /var/www/cobbler
  命令号格式
  cobbler command [subcommand] [--arg1=value1] [--arg2=value2]
  command: distro   profile   system  import  sync
  distro :centos直接挂载光盘就有,会自动放在/var/www/cobbler的ks_mirror下
  使用cobbler import导入 --help
  cobbler import 也要指明ks文件,是因为他在创建distros的时候会自动创建profile,不需要就删除
  cobbler import --name=centos-6-x86_64 --path=/mnt(挂载关盘目录)
  会自动放在/var/www/cobbler的ks_mirror下
  cobbler distro list:查看列表
  remove:删除
  profile: ks文件放在/var/lib/cobbler/kickstarts/下边
  cobbler profile add --name="centos6" --distro=Centos-6-x86_64 --kickstart=/var/lib/cobbler/kickstarts
  profile list
  然后使用cobbler sync 同步一遍,会自动生成default文件
  再做一遍就多一个,可以做个c7的
  cobbler_web
  /etc/cobbler/auth.conf
  /modules.conf
  [authentication]
  module = authn_pam
  [authorization]
  module = authz_allowall
  /users.conf
  admin = "管理员名字"
  cobbler = "普通用户名字"
  记得passwd命令给个密码
  /cobbler_web.conf
  require all granted
  zabbix:监控系统   **绝对不允许不受监控的系统到生产环境**
  硬件:硬件自身带传感器
  软件:操作系统本身.系统上某进程
  业务指标:例如httpd有几个用户,多少请求等
  NMS:网络管理系统
  监控数据采集通道:
  监控系统处于一个数据抓取的工具上,每隔一段时间从被监控的主机中读取数据
  snmp协议:简单网络管理协议
  ssl/telnet:但是有权限问题,必要的时候还要管理员
  ipmi接口:Intel智慧平台管理接口
  agent:监控系统在被监控主机安装一个程序,两者可以通过某种协议通信,被监控主机用管理员身份运行该程序就好,需要访问用户控制**
  master/agent
  sensor:传感器,观察数据指标
  工作方式:
  1.只对当下数据进行采集,一旦异常立马警报
  2.对过去的数据进行观察,检查异常的范围波动频率时间等(要求数据存储)
  监控系统基本功能:NMS实现,其采集通道见上,工具见下
  1.数据的采样:按固定的周期频率,为了观察;历史数据,还要保存下来,历史数据经过一段时间后可丢弃,只保留趋势数据就好
  趋势数据:每一段时间(一天)最大值最小值平均值之类的
  2.数据的存储
  3.告警(报警):在某一数据一致不正常就像用户报警,邮件短信甚至人工合成声音的电话
  脚本:触发脚本自动完成一些功能,是在不行再报警
  操作:配合云环境,虚拟化,发现某一虚拟机挂了,kill掉在重建一个配置好加入到环境中
  媒介:邮件.短信,微信
  4.展示:visual,可视化,随时可以用形象的方式经结果展示给用户
  常见开源监控工具:
  cacti naglos zabbix ganglia
  cacti:本质上不是监控工具,本身不具备监控功能,基于协议构成,能够存储数据并将其数据通过mysql前台展示出来,但是报警功能差
  通常和naglos结合使用
  zabbix:既能监控又能报警,取代了上两者集合,使用的是mysql的数据系统
  ganglia:对多台主机的数据聚合展示,今天有人集合g,z使用,尤其是超级计算机进行计算的
  数据存储:
  对数据库的写压力太大,千台主机监控指标就到十万指标,cpu的使用率,网卡的,还有多网卡,内存的,是非常大的数据
  历史数据:NVPS
  趋势数据:
  存储系统:
  关系型数据库:mysql,性能都不是很好,不是保证事务就不要用
  rrd:环装数据库,满了就在覆盖存储一圈,类似一致性哈希算法,在节店上存储,空间,存储槽都是早就创建好了的
  *NoSQL:不支持事务,没有复杂的关系.工作空间是内存,因此性能非常好,每隔一段时间同步到硬盘
  时间序列存储
  SNMP:简单网络管理协议(古老的协议,没涉及复杂的安全功能,所以有别的就不要使用它,能不用就不用)
  有agent的,nms/agent组成
  每一个通过他监控的各种各样的设备都內建他的agent
  snmpd服务
  nms:cli,命令行工具  gui,图形工具
  agent:service,监控在某个端口,接受请求采集数据返回响应给请求者,说起来想server端..
  为避免agent端信息泄露要进行认证
  v1版snmpd没有任何安全
  v2c(community社区) 类似社区,有令牌通过就可以响应,public社区可以公开出去的社区
  v3使用了很强的加密功能,但是网上很少有支持的
  操作:
  获取操作:get,getnext,bulk(一次获取多个)
  管理操作:
  陷阱机制,被监控端主动向监控端发送数据,类似dns的通知
  MIB,OID
  ZABBIX:开源监控系统 2.0稳定成熟的版本
  LTS:建议选择的版本,如2.2 3.0 长期支持维护的版本
  特性:
  数据采集
  snmp,ssh/telnet,agent,ipmi,jmx(java management extensions)
  自定义采样操作:userprameter
  告警
  告警升级:执行脚本,在告警(notification)
  展示(zabbix_web)
  实时绘图:需要看图时候,在数据库中取数据,动态绘制出来
  单个graph图片
  多个graph组成screen
  slide show:多个屏显示,每个多少秒换个屏
  map:各设备之间创建一个拓扑图,某设备故障,在拓扑图中将那台机那条线不同色标出来
  存储
  mysql/pgsql
  支持模板:实现快速监控主机添加
  网络自动发现:扫描一个网段,将内部的主机自动套上模板添加进来
  分布式监控:减少监控,各设备读写压力,有代理主机替你采集指标(每个代理主机采集一部分指标),client只要拿过来就好了
  server-----proxy-----agent/ssh/ipmi
  丰富的API接口
  程序组件:  zabbix_web GUI php研发
  zabbix_database
  zabbix_server  c语言  web page
  icmp/impi/snmp devices
  agent:zabbix_agentd
  JMX
  zabbix_proxy      web page
  icmp/impi/snmp devices
  agent
  zabbix_server
  agentd
  proxy:代理,可选,不做分布式的时候不需要
  get:命令行工具,手动测试向agent发起数据采集请求
  sender:运行与agent端,手动向server端发送数据
  java_gateway:java网关JMX JVM
  database:和zabbix自身没关系,是mysql被用来做数据存储
  web:基于web接口展示的gui,对zabbix所有操作几乎都是通过gui来进行,所以他也是个管理接口
  zabbix逻辑组件:内部完成一次完整的监控操作用到的组件
  主机组
  主机
  监控项:item;
  key,事先定义好的能够采集数据的命令或脚本的名称,key后边加一个参数,参数将会传递给命令,通过修改参数,可以达成一个key监控多个项
  应用:application,同一类监控项item的集合
  触发器:trigger,一个逻辑表达式(或调用了函数的表达式),监控item接受的数据key对应的数据是不是在合理范围内,即阈值,大与阈值时候,从ok转到problem,会在范围内转回ok
  一般都是在范围内problem,不在为ok
  事件:event,发生一个值得关注的事情,如ok转换,发现一个新主机,可以针对事件来做相关操作,一旦事件发生了就会发生后续一系列操作
  会牵连到告警操作
  动作:action 对于特定事件事先定义的处理,包含操作(operations)和条件(condition)
  条件不同,操作不同
  常见:通知,告警
  报警升级:escalation,
  报警:
  媒介:media,发送通知的手段或通道,email,messages等
  通知:notification,告警内容
  升级:
  层层上诉,县长不行市长,市长不行省长
  可以定义多个操作,先执行什么远程命令,还不行就升级报告
  远程命令:remote command,预定义的命令.在主机处于特定条件下自动执行
  模板:template,快速定义被监控主机的各监控项的预设项目集合
  通常包含item,trigger,graph,screen
  图形:graph,监控项中采集到的历史数据,用图像的方式展示出来就叫graph
  支持现状图面积图饼图爆炸图
  屏幕:screen,多个graph集合组成
  逻辑组件逻辑关系图
  maintenance:维护,定义维护期,维护期内遇到任何异常都不要报警
  zabbix poller:数据的采集器.轮训工具,采集一次又一次
  internal监控:针对于自身,采集了几次数据之类的
  服务端进程
  poller:轮训数据
  watchdog:监控进程是不是正常,不正常重启
  housekeeper:内务管家,管理数据库中的数据,比如清理数据库
  alerter:报警工具
  escalator:报警升级
  httppoller
  discover:发现主机,上线下线等
  nodewatcher:监控节点
  timer:计时器
  db_config_syncer
  db_data_syncer:完成配置同步和数据同步
  pinger:探测主机的
  监控级别(最低限度)图
  monitored host:被监控主机数
  zabbix注意:对于不是关键性指标,监控间隔就可以长一点,重要的就要设置短一点
  监控数据库支持  图
  监控需要的扩展   图
  server端需要扩展  图
  jabber那个用不到
  zabbix组件:server,agent,database可以分开设置
  实际部署:同一台主机上进行,不同主机自己去试
  sever,agent,web*,proxy*,get,sender
  trousers-0.3.13
  mget *3.0.3*
  1.mariadb-server安装---配置文件---innodb_file_per_table=ON skip_name_reslove=ON----启动服务
  2.创建数据库----授权用户
  3.安装服务端 zabbix-server-mysql/get/
  4.安装zabbix-web
  安装php,httpd,php-mysql,php-gd,php-ldap,php-xml,pgp-mbstring,php-bcmath
  5.安装agent
  安装zabbix-sender
  6.服务端数据库初始化
  2.x:三个sql脚本
  按官方文档的固定数据导入三个脚本
  3.x:一个sql脚本
  create.sql(server-mysql提供)
  mysql -u   -h  database_name  < create.sql
  7.启动
  配置文件:/etc/zabbix/zabbix_server.conf
  先备份
  配置段:
  general parameters:通用参数
  listenport:监听端口,默认10051
  sourceIP:限定采集数据向外通告自己的ip是什么,不然基于ip的访问控制会拒绝
  logtype:=日志类型
  logfile=/path/to/file
  logsize:设置日志滚动大小,0不滚动
  debuglevel:日志级别0-5,默认3,自己测试定义5
  DBhost:数据库地址     *
  dbname:数据库名称     *
  dbuser:               *
  dbpasswd:             *
  dbsocket:mysql.sock
  dbport:与上边的socket有一个就好;mysql 3306
  advanced ...:高级参数
  高级参数就是定义服务端的那几个进程的参数
  loadable:模块
  tls....:安全
  [mandatory:是不是强制配置]
  8.配置web gui
  先编辑php的时区 /etc/php.ini date.timezone(所有php程序都遵循)
  到/etc/httpd/conf.d下的zabbix.conf里边的data.timezone   Asia/shanghai
  然后重启httpd
  172.16.7.5/zabbix
  安装生成的配置文件/etc/zabbix/web/zabbix.conf
  monitoring:监控 *
  inventor:
  reports:报告
  configuration:配置 *
  administrator:管理 *
  *:将来基本上就对这几个做操作
  9.agent端配置
  /etc/zabbix/zabbix_agentd.conf
  zabbix-agent
  备份
  general parameters

  passive checks>  server:=ip1,ip2(代理服务器)..
  允许那些主机过来采集数据
  listenport:端口,默认10050
  listenip:0.0.0.0监听的地址,所有
  startagents:=
  下午第一节可

  active checks>  serveractive:=ip1[:port],iP2...
  hostname:=zabbix server
  主机名,与服务器端配置添加的主机名完全保持一致,区分大小写
  hostmatedata:定义知己元数据,在自动进程上使用
  hostmetadataitem:定义那些采集项
  refreshactivecheck:刷新频率,默认120秒
  buffersend
  buffersize:发送缓冲大小
  advanced ...
  user-defined monitored... 用户自定义参数
  loadable 模块
  tls.... 安全
  [mandatory:是不是强制配置]
  10.监控配置
  host groups --> host-->application--->item--->trigger--->event(不用配置)---->action(condition,operation)--->通知
  graph:
  simple:自动生成的
  customed:将多个item的图形数据整合在一个图形数据进行展示
  11.items
  key:
  內建
  type:
  agent:
  agent(active)
  snmp v1
  用户自定义
  12.采集到的数据
  数值:
  整数
  浮点数
  字符串
  字符串
  文本
  13.存储的值:
  as is:不对数据做任何处理
  速率:变化速度
  简单变化:变化量,这次值减上次值,除时间(秒)可以求出速率
  ntpdate 172.16.0.1
  14.trigger
  逻辑表达式,阈值;通常定义数据的不合理区间
  OK:正常状态,较老的版本中叫FALSE
  PROBLEM:非正常状态,较老的版本叫TRUE
  OK-->PROBLEM:出问题了
  PROBLEM-->OK:recovery恢复
  通常是拿最近5次的平均值,最大值,最小值与阈值比较
  或是最后一个值与阈值比较
  可调用函数:
  nodata()没数据
  last()最后一次
  参数
  function(#300)记上#是最近多少次
  不加#是最近多长时间
  事件的严重级别 图

  not>  information
  warning
  average
  high
  disaster
  表达式
  {hostname:key[parameters].function(arguments)}
  <>=#(not equal)
  +-*/
  &|
  trigger之间是可有依赖关系的
  被依赖的出现问题,依赖的就不用报告了
  一个item上可以定义多个trigger
  media媒介
  告警信息的传递通道
  类型
  email:邮件
  script:自定义脚本
  sms
  jabber
  ez texting
  接受信息的目标为zabbix用户:
  需要用户上定义对应各种媒介通道的接受方式
  发送内容由zabbix自动生成
  action:
  action  图
  conditions 图
  A:不在正常的维护区间
  B:转换到problem
  多个条件之间具有逻辑关系
  operations 图
  条件满足时触发的操作
  remote_command:命令
  notification:通知
  点new定义  图
  3600s 表示每3600秒定义一步,启动什么服务
  step 从第几步到第几步
  1-1  2-5  第1步做什么;等级上升;第2-5步做什么;等级上升
  send message
  media type:传递信息的通道
  email
  script报警脚本
  脚本位置:zabbix_server.conf文件中alertscriptspath定义的路径下
  /usr/lib/zabbix/alertscript
  zabbix服务器在调用脚本时,会传递三个参数
  $1:经由此信道接受信息的目标{ALERT.SENDTO}
  $2:主题subject{ALERT.SUBJECT}
  $3:body,邮件正文{ALERT.MESSAGE}
  信息接收人
  user groups:组内的人都能收到
  user
  remote_command
  功能:
  在agent所在主机上执行用户指定命令或者脚本
  重启
  通过ipmi重启服务器
  完成任何用户自定义脚本中定义的操作
  可执行命令类型
  ipmi
  ssh
  telnet
  custom script
  global script
  前提要求:
  1.zabbix用户要有所需要的执行权限
  2.允许agent进程执行远程命令,默认是关闭的
  enableremotecommands=1
  3.sudo注释掉 default requiretty用户不需要控制终端
  或default zabbix !requiretty
  host groups --> host-->application--->item(key)--->trigger--->event(不用配置)---->action(condition,operation)--->通知
  media type
  user/user group
  action operations:可定义为升级方式
  send message
  remote_command
  如何使用宏,自定义图形,自定义参数,如何使用自定义key,分布式监控
  展示接口:
  graph:simple自带 custom自定义
  screen:整合多个graph
  slide show:多个screen以幻灯的方式展示
  模板:一系列配置的集合
  items
  trigger
  graph
  application
  screen等
  创建完成后,让主机连接到模板,类似软连接那样子.并且当模板更改的时候,连接改模板的主机也会做出相应的修改
  创建模板-----添加模板的各种选项----添加新主机---在添加新主机的时候点template天机模板
  注意:
  模板可继承,可以再模板的情况上继续添加监控项等
  宏:(macros)类似于变量,预设的文本替换模式,文本类型的替换机制,跟变量还是不完全相同的,只是字符串变化,没有变量的浮点数啊之类的
  生效级别:
  全局:administrator---右侧上方gui哪里下拉箭头找macros
  模板:编辑模板---macros
  主机:编辑主机---macros
  生效顺序:应用范围小的优先级高
  类型:
  內建宏:{macro_name}
  自定义宏:{$macro_name}多个$符
  自定义命名要求:大写字母,数字,下划线
  网络发现:network discovery     上午第二节课
  根据用户实现定义的规则,来扫描一个网段,或者是ping或者是某个服务(80端口有没有被监控?监控了就添加主机到监控中)从而添加主机,并且还能自动套上模板,并且某主机不在线还能自动移除主机
  时间间隔很长
  功能:加快部署,减轻管理工作,经常发生变化的工作环境中不用手动管理
  基于以下信息
  ip ranges
  service(ftp,http等)
  zabbix agent
  SNMP
  阶段:
  discovery
  disconvery:发现事件
  lost:丢失事件
  actions
  configuration---discovery
  注意:low level(也是发现,但是能区分Windows和linux,并且连接像对应的模板,是一种低级别的发现,一般是调用脚本完成)
  低级别是指对操作系统比较近
  ip range :扫描的网段 xxxxx-xxxxx
  check:检查的项
  delay:每多长时间检测一次
  configuration----action--右上方改成discovery
  自定义key:
  item type:和key本身的可用是有关系的,不同类型适用的接口有可能不同,一些key只能用在制定的接口之上
  agent
  agent(active)
  simple
  snmpv1
  snmpv3
  ssh
  ...
  接口类型:agent snmp impi
  自定义key值得是在zabbix agent端的配置文件上游用户通过userparameter指令定义的key
  UserParameter=<key>,<command>
  =mysql.ping,mysql -umkmk -pmy123 -h127.0.0.1
  注意:
  重启agent生效
  注意一定不能重名,并且只能通过agent接口运行
  是调用/bin/sh(centos中默认bash)运行
  监控自定义key的时候,一定要确保被监控的主机上游这个自定义key
  UserParameter=<key
  • >,<command>
      可以接受参数,参数会传递给后边的命令当参数
      *:任意数量参数,$1,$2......$0是命令本身
      UserParameter=memory.usage
  • ,awk '^/$1/{print $$2}' /proc/meminfo
      $1,前边传递的参数 $$2是awk自身的变量
      zabbix_get -s 172.16.7.5 -k memory.usage[MemFree]
      web监控
      首先定义web方案(scenarios)
      一个或多个httpd请求或步骤(step)
      步骤的执行过程将按照预先定义俄顺序进行执行
      通过web监控获得信息
      整个web方案中所有步骤的平均下载速度
      失败的步骤号
      失败的报错信息
      在方案的具体步骤中,可以按需使用以下信息
      该步骤的下载速度
      回应时间
      回应状态码
      zabbix可以检测获取到的html页面是不是包含预设的字符串,还可以实现登录和页面点击
      application---web方案
      configuration---host----web
      创建完会自动生成一些items,可以直接拿来用
      主动监测:
      agent需要的基本配置:
      serveractive=
      hostname=:要与server端添加的而主机名完全一致
      主动被动和主机没有关系.和items有关,要选zabbix agent(active)
      在监控项非常多的时候会减轻服务器的压力
      zabbix proxy :主要是用在分布式监控的
      server---proxy---agent
      使用proxy,用web gui添加就好
      /etc/zabbix/zabbix_proxy.conf
      heartbeat frequency每隔多长时间健康监测一次
      config
      datasender
      agent端把server和serveractive改成proxy的IP地址,然后重启zabbix-agent
      proxy mode
      active主动:自己制动去获取
      passive被动:等待发送过来
      proxy的主机名记得在hosts中表明解析
      Zbbix proxy的配置过程:
      1、配置proxy主机,启动服务;
      (1) 安装程序包
      # yum install zabbix-proxy-mysql zabbix-agent  zabbix-sender  zabbix-get
      (2) 准备数据库
      创建、授权、导入方案
      (3) 修改配置zabbix_proxy.conf
      Server=
      Hostname=,与GUI端添加时候的名字要一直并且保证能解析改名称
      DBHost=
      DBName=
      DBUser=
      DBPassword=
      ServerActive=
      heartbeatfrequency每隔多长时间健康监测一次
      config  拉取的时间间隔
      datasender 发送的时间间隔
      2、在server端的GUI上添加此代理服务器;
      Administration --> proxies
      注意名字要和上边的配置文件中的hostname一致,并且是必须添加主机名
      3、在server端的GUI上添加通过porxy进行监控的主机;
      注意:通过proxy监控的各agent要授权proxy主机有监控权限;
      zabbix performance tuning:性能调优
      nvps:new values per second
      最基本的性能指标
      100w/m, 15000/s
      官方给的最多能承载数据,实际肯定没这么多
      调优:
      Database:历史数据不要保存太长时间;尽量让数据集可缓存到数据库服务器内在中;
      触发器表达式:减少使用min(), max(),avg(),尽量使用last(), nodate();
      数据收集:polling较慢(减少使用SNMP/agent-
      less/agent);尽量使用trapping(agent(active));
      数据类型:文本型数据处理较慢,尽量少收集类型为text或string的数据,多使用类型为Numeric的数据;
      zabbix服务的配置:
      (1)zabbix internal类型的监控来获知zabbix自己的状态;
      (2)服务器组件数量:
      alerter, discoverer, escalator, http poller, housekeeper, icmp pinger, ipmi poller, poller, trapper
      configuration syncer, db watchdog
      StartPollers=100
      StartPingers=10
      StartPollersUnreachable=50
      StartIPMIPollers=10
      StartTrappers=20
      StartDBSyncers=8
      数据库优化:
      分表;
      history_*, trends*, events*
      博客作业:
      zabbix-server, zabbix-proxy, zabbix-agent应用;

  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543305-1-1.html 上篇帖子: ansible自己总结(playbook) 下篇帖子: Centos6.5利用RubyGems的fpm制作zabbix_agent的rpm包,并使用ansible批量部署
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表