美文网首页
Linux命令指南(二)

Linux命令指南(二)

作者: 零点有成MagicWars | 来源:发表于2018-10-03 18:40 被阅读0次

    作业地址
    http://39.104.202.12:8000/monitor/cpu

    自动化监控与报警

    自动监控CPU,内存使用率

    安装wechatpy、cryptography模块

      import psutil, time, datetime
    
      class Monitor():
          cpu_data = []
    
        @classmethod
        def mem(cls, mem_max=90):
          """内存使用监控"""
              val = psutil.virtual_memory().percent
              # print(val)
              if val > mem_max:
                  cls.send_msg('内存使用率为{:1f}%,超过{}%,请关注!!!'.format(val, mem_max))
    
          @classmethod
          def cpu(cls, cpu_max=90):
              """CPU使用监控"""
              val = psutil.cpu_percent(1)
              cls.cpu_data.append(val)
              print(cls.cpu_data)
    
        if len(cls.cpu_data) >= 3:
            avg = sum(cls.cpu_data)/len(cls.cpu_data)
    
            if val > cpu_max:
                # cls.send_msg('CPU使用率为{:1f}%,超过{}%,请关注!!!'.format(avg, cpu_max))
                # cls.email('CPU使用率为{:1f}%,超过{}%,请关注!!!'.format(avg, cpu_max))
                cls.weChat('CPU使用率为{:1f}%,超过{}%,请关注!!!'.format(avg, cpu_max))
                print('已向微信发送警告消息')
            cls.cpu_data.pop(0)
    
          @classmethod
          def send_msg(cls, content):
              """发送报警信息"""
                print(content)
    
            @classmethod
            def email(cls, content):
                  import smtplib
                  from email.mime.text import MIMEText
                  from email.utils import formataddr
        
                  nickname = '监控程序'
                  sender = '295844041@qq.com'
                  password = 'wkezvmukjgqjbhjb'
                  reciever = 'zhengshucheng@idataway.com'
    
                  msg = MIMEText(content, 'html', 'utf-8')
                  msg['From'] = formataddr([nickname, sender])
                  msg['Subject'] = '自动报警' # 邮件主题
    
                 server = smtplib.SMTP_SSL('smtp.qq.com', 465)
    
                try:
                      server.login(sender, password)
                      server.sendmail(sender, [reciever], msg.as_string())
               except Exception as err:
                      print(er)
              finally:
                      server.quit()
    
              @classmethod
              def weChat(cls, content):
                      """发送微信提醒"""
                    from wechatpy import WeChatClient
    
                    client = WeChatClient('wxfe4f8777c09bd3fe', '71a2f3afbc44cfd56585dbe4e63dbbe8')
                    template_id = 'XJ-ezE5udUqsPg6XlC_O7y9nX5Ttu3sxwgKp6MUmYF4'
                    openid = 'oUyaM1Ra-KKjHRaiyNepr1ju1sZI'
                  data = {
                        'msg':{'value': content,'color': '#173177'},
                        'time': {'value': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'color': '#173177'},
                  }
    
                  client.message.send_template(openid, template_id, data)
    
          """
          mem_max = 25
          Monitor.mem(mem_max)
          """
          cpu_max = 1
          while True:
                Monitor.cpu(cpu_max)
                time.sleep(2)
    

    自动化安装与配置——以ngix为例

    自动化安装-以源码编译方式

    去niginx官网查看文档:http://nginx.org/en/docs/configure.html,查看所需参数

    自动化配置

    自动化部署

    分布式版本工具git的使用

    1. 为git仓库创造一个用户

       useradd -m git #创建一个git的用户
      
    2. 为git用户设置密码

           passwd git
      
    3. 切换到git用户

      su - git

    4. 初始化仓库

      git init --bare <projectname>.git # --bare表示创建的是空的仓库

    使用Fabric批量部署项目

    Docker

    docker安装

    步骤参见官方文档https://docs.docker.com

      service docker stop/start/restart
      docker info  # 查看当前docker更多信息
      docker --help # 查看相应帮助文档
    
    镜像管理
    1. docker hub : http://hub.docker.com

    2. 阿里云:http://dev.aliyun.com

         docker pull alpine # 拉取未指定标签的alpine
      
    使用docker image 查看相关命令
        docker image
        docker image ls 或docker images # 当前已拉取的镜像
        docker image rm <imageName> # 删除镜像
    

    不要死记硬背命令,要善于查看帮助

    容器管理

    输入docker 查看相关命令

        docker
    

    查看管理命令

      docker run alpine echo "hello docker"
      docker container ls 或docker ps # 查看正在运行的镜像
      docker container ls -a # 查看容器
      docker container <containerID> # 删除容器
      docker run -d alpine ping www.baidu.com # 后台使用alpine 去ping百度
      docker stop <containerID> # 停止容器运行
      docker run --rm <image> <cmd> # 容器停止运行后会自动删除容器,同时数据也会被删除
    

    数据卷

    将物理机中的目录映射到容器中

        docker run --rm -v /root:/data alpine touch /data/test.txt # 将物理机中root目录映射到容器data中去,在容器data中创建一个文件test.txt,这个
        docker run --rm -v "$(pwd):/data" alpine touch /data/test.txt # 将物理机中 **当前目录** 映射到容器data中去
        docker run --rm -v "$(pwd):/data:ro" alpine touch /data/test.txt # 加上ro表明只进行**只读**映射
    
    在docker中运行web服务

    从docker hub中获取nginx镜像

          docker pull nginx:alpine # 下载标签为alpine的nginx镜像 
          docker run --rm nginx:alpine # 运行nginx服务,但会卡在界面中
          docker run -d --rm nginx:alpine 
          docker ps # 查看当前运行的容器
          docker kill <CONTAINER ID > # 关闭容器
    

    后台运行nginx后,还不能访问端口,可以(1)

          docker run --rm -d -P nginx:alpine # 
    

    此时PORTS显示 0.0.0.0:32768->80/tcp,表明物理机中的32768端口映射到了容器中的80端口,这种端口是随机绑定映射的
    (2)第(1)种方法物理机端口随机,无法提供稳定的服务,因此需要重新指定端口

          docker run --rm -d -p 8080:80 nginx:alpine 
    
    查看所有运行中的docker 容器id
            docker ps -q
            docker kill -$(docker ps -q) # 关闭所有运行中的容器
    

    构建镜像 docker build

    构建镜像之前需要先编写Dockerfile
    docker官方文档中reference:

    • FROM: 指定基础镜像
    • RUN:
    • CMD: 指定容器启动时执行的命令
    • LABLE: 用于添加扩展信息到容器中
    • COPY:用于将文件拷贝到容器中
    • WORKDIR:设置工作目录

    利用vi Dockerfile 进入编辑页面

        FROM alpine (也可以使用ubuntu:16.04)
        LABEL version = '1.0'
        LABEL description = 'my first image'
        RUN apk update && apk add python3  #(如果使用ubuntu系统,则RUN apt update && apt -y install python3)
        COPY . /code # 将当前目录下的文件拷贝到code目录中。此方式下修改原来目录中的文件,运行容器时结果仍然不变
        WORKDIR /code # 指定容器运行后的工作目录
        CMD ['<python3>', '<app.py>']  # 
    

    编辑完Dockerfile后

        docker build -t myapp . # 在当前目录(.)中构建一个tag为myapp的镜像
        
        docker inspect redis:alpine # 查看镜像
    

    综合实战

    python程序,将数据存放在redis中,并且

    1. 创建目录存放数据

         mkdir /redis-data
         docker run -d --name redis -v /redis-data:/data redis:alpine # 为容器指定一个名字 --name <ContainerName>
      
    2. 创建python文件

      mkdir myweb 
      cd myweb/  
      vi app.py
      

      编辑app.py 文件

      # 使用flask创建一个web服务
      from flask import Flask
      import redis
      
      app = Flask(__name__)
      # 连接redis
      r = redis.Redis(host='redis', port=6379)
      
      @app.route('/')
      def hello():
              count = r.incr('clicks')
              return "ZSC love CS! {}".format(count)
      
      if __name__ == '__main__':
              app.run('0.0.0.0', port=5000)
      
    3. 编辑Dockerfile

       FROM python:alpine # docker 提供了python镜像
       COPY . /code
       RUN pip install flask redis #不用使用pip3
       WORKDIR /code
       EXPOSE 5000 # 开放5000的端口
       CMD ['python', 'app.py']
      
    4. 构建镜像

       docker build -t myweb .
      
    5. 启动运行app
      docker run --rm -d -p 80:5000 myweb
      访问地址后,显示Internal Server Error,但是虽然80已经映射到了myweb容器的5000端口,而redis和pythonl两个容器之间是隔离的。

    6. 连接redis后启用镜像

          docker run --rm --link redis -p 80:5000 myweb
      

    相关文章

      网友评论

          本文标题:Linux命令指南(二)

          本文链接:https://www.haomeiwen.com/subject/qfntnftx.html