ansible自动化运维(四)运维实战

相关文章
ansible自动化运维(一)简介及清单,模块-CSDN博客
ansible自动化运维(二)playbook模式详解-CSDN博客
ansible自动化运维(三)jinja2模板&&roles角色管理-CSDN博客

五。运维实战

5.1Ansible自动化安装nginx

编译安装nginx

(1)下载nginx包

使用wget下载nginx包,下载地址:

http://mirrors.sohu.com/nginx/nginx-1.9.6.tar.gz

解压下载nginx包

|---------------------------------------------------------------------------|
| root@server \~# wget http://mirrors.sohu.com/nginx/nginx-1.9.6.tar.gz |

进入解压后的目录:

|-----------------------------------------------------------------|
| root@server \~# cd nginx-1.9.6 root@server nginx-1.9.6# |

这条命令将当前工作目录切换到解压后的Nginx源代码目录。

安装两个依赖

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx-1.9.6# yum groupinstall "Development Tools" -y root@server nginx-1.9.6# yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y |

配置编译参数:

|--------------------------------------------------------------------|
| root@server nginx-1.9.6# ./configure --prefix=/usr/local/nginx |

这条命令运行configure脚本本来检查系统环境并生成Makefile。-prefix=/usr/local/nginx选项指定了安装路径,即Nginx将被安装到/usr/local/nginx目录下。

编译和安装

|-----------------------------------------------------|
| root@server nginx-1.9.6# make && make install |

这两条命令依次执行以下操作:

make:根据Makefile中的规则编译源代码,生成可执行文件和其他必要的文件。
make install:将编译好的文件复制到指定的安装目录(由 --prefix 选项指定),即/usr/local/nginx

(2)编写/etc/init.d/nginx文件

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx-1.9.6# vi /etc/init.d/nginx root@server nginx-1.9.6# chmod +x /etc/init.d/nginx root@server nginx-1.9.6# cat /etc/init.d/nginx #!/bin/bash # chkconfig: - 30 21 # description: http service. # Source Function Library . /etc/init.d/functions # Nginx Settings NGINX_SBIN="/usr/local/nginx/sbin/nginx" NGINX_CONF="/usr/local/nginx/conf/nginx.conf" NGINX_PID="/usx/local/nginx/logs/nginx.pid" RETVAL=0 prog="Nginx" start() { echo -n "Starting prog: " mkdir -p /dev/shm/nginx_temp daemon NGINX_SBIN -c NGINX_CONF RETVAL=? echo return RETVAL } stop() { echo -n "Stopping prog: " killproc -p NGINX_PID NGINX_SBIN -TERM rm -rf /dev/shm/nginx_temp RETVAL=? echo return RETVAL } reload() { echo -n "Reloading prog: " killproc -p NGINX_PID NGINX_SBIN -HUP RETVAL=? echo return RETVAL } restart() { stop start } configtest() { NGINX_SBIN -c NGINX_CONF -t return 0 } case "1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; configtest) configtest ;; \*) echo "Usage: 0 {start\|stop\|reload\|restart\|configtest}" RETVAL=1 esac exit RETVAL |

(3)清空配置文件重新填写

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx-1.9.6# vi /usr/local/nginx/conf/nginx.conf root@server nginx-1.9.6# cat /usr/local/nginx/conf/nginx.conf user nobody nobody; #//定义nginx运行的用户和用户组 worker_processes 2; #//nginx进程数,一般为CPU总核心数 error_log /usr/local/nginx/logs/nginx_error.log crit; #//全局错误日志定义类型 pid /usr/local/nginx/logs/nginx.pid; #//进程文件 worker_rlimit_nofile 51200; events #//工作模式与连接数上限 { use epoll; worker_connections 6000; } http #//http下的一些配置 { include mime.types; #//文件扩展名与文件类型映射表 default_type application/octet-stream; #//默认文件类型 server_names_hash_bucket_size 3526; server_names_hash_max_size 4096; log_format combined_realip 'remote_addr http_x_forwarded_for $time_local' 'host "request_uri" status' '"http_referer" "http_user_agent"'; sendfile on; #//开启高效文件传输模式 tcp_nopush on; #//防止网络阻塞 keepalive_timeout 30; #//长连接超时时间,单位为秒 client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 8 4k; request_pool_size 4k; output_buffers 4 32k; postpone_output 1460; client_max_body_size 10m; client_body_buffer_size 256k; client_body_temp_path /usr/local/nginx/client_body_temp; proxy_temp_path /usr/local/nginx/proxy_temp; fastcgi_temp_path /usr/local/nginx/fastcgi_temp; fastcgi_intercept_errors on; tcp_nodelay on; #//防止网络阻塞 gzip on; #//开启gzip压缩输出 gzip_min_length 1k; gzip_buffers 4 8k; gzip_comp_level 5; gzip_http_version 1.1; gzip_types text/plain application/x-javascript text/css text/htm application/xml; server #//虚拟主机配置 { listen 80; server_name localhost; index index.html index.htm index.php; root /usr/local/nginx/html; location \~ \\.php { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/1ocal/nginx/html$fastcgi_script_name; } } } |

(4)编写完成后检查

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx-1.9.6# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful |

(5)启动nginx

|-----------------------------------------------------------------------------------------------------------------------|
| root@server nginx-1.9.6# service nginx start Reloading systemd: 确定 Starting nginx (via systemctl): 确定 |

编译安装完成

5.2环境准备

(1)移动目录文件

将nginx.tar.gz复制到/etc/ansible/nginx_install/roles/install/files下

启动脚本和配置文件都放到/etc/ansible/nginx_install/roles/install/template下

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server \~# mv nginx-1.9.6.tar.gz /etc/ansible/nginx_install/roles/install/files/ root@server \~# cp nginx-1.9.6/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/ root@server \~# cp nginx-1.9.6/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/ |

(2)编辑需要的yml文件

|----------------------------------------------------------------------------------|
| root@server nginx_install# vi /etc/ansible/hosts #清单文件中加入这两条 nginx Host2 |

|------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx_install# cat install.yml --- - hosts: nginx #//入口文件 remote_user: root gather_facts: True roles: - common - install |

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx_install# cat roles/common/tasks/main.yml - name: install initialization require software #//安装需要的依赖 yum: name={{ item }} state=installed with_items: - zlib-devel - pcre-devel - gcc |

|--------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx_install# cat roles/install/vars/main.yml nginx_user: nobody #//定义所需变量 nginx_port: 80 nginx_basedir: /usr/local/nginx |

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx_install# cat roles/install/tasks/copy.yml - name: Copy Nginx Software #//复制压缩包 copy: src=nginx-1.9.6.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root - name: Uncompression Nginx Software #//解压压缩包 shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/ - name: install Nginx shell: cd /usr/local/nginx-1.9.6 && ./configure --prefix=/usr/local/nginx && make && make install - name: Copy Nginx Start Script #//复制启动脚本 template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755 - name: Copy Nginx Config #//复制nginx配置文件 template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644 |

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx_install# cat roles/install/tasks/install.yml - name: create nginx user #//创建用户 user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin - name: start nginx service #//开启服务 shell: /etc/init.d/nginx start - name: add boot start nginx service #//加入开机启动 shell: chkconfig --level 345 nginx on - name: delete nginx compression files #//删除压缩包 shell: rm -rf /tmp/nginx.tar.gz |

|--------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx_install# cat roles/install/tasks/main.yml - include: copy.yml #//调用copy.yml和install.yml - include: install.yml |

5.3执行文件

(1)运行install.yml

|----------------------------------------------------------------------------------------|
| root@server nginx_install# ansible-playbook /etc/ansible/nginx_install/install.yml |

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server nginx_install# ansible-playbook /etc/ansible/nginx_install/install.yml WARNING: Invalid characters were found in group names but not replaced, use -vvvv to see details PLAY nginx ******************************************************************************************************* TASK Gathering Facts ********************************************************************************************* ok: host2 TASK common : install initialization require software ************************************************************ DEPRECATION WARNING: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple items and specifying `name: "{{ item }}"`, please use `name: 'zlib-devel', 'pcre- devel', 'gcc'` and remove the loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. ok: host2 => (item=u'zlib-devel', u'pcre-devel', u'gcc') TASK install : Copy Nginx Software ******************************************************************************* ok: host2 TASK install : Uncompression Nginx Software ********************************************************************** WARNING: Consider using the unarchive module rather than running 'tar'. If you need to use command because unarchive is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: host2 TASK install Nginx *********************************************************************************************** changed: host2 TASK install : Copy Nginx Start Script *************************************************************************** ok: host2 TASK install : Copy Nginx Config ********************************************************************************* ok: host2 TASK install : create nginx user ********************************************************************************* ok: host2 TASK install : start nginx service ******************************************************************************* changed: host2 TASK install : add boot start nginx service ********************************************************************** changed: host2 TASK install : delete nginx compression files ******************************************************************** WARNING: Consider using the file module with state=absent rather than running 'rm'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: host2 PLAY RECAP ********************************************************************************************************* host2 : ok=11 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |

2.管理配置文件

生产环境中大多数时候需要管理配置文件的,安装软件包只是在初始化环境的时候用一下。下面给写一个管理nginx配置文件的playbook。

(1)实现

创建目录结构

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server \~# mkdir -p /etc/ansible/nginx_config/roles/{new,old}/{files,handlers,vars,tasks} root@server \~# tree /etc/ansible/nginx_config/ /etc/ansible/nginx_config/ └── roles ├── new │ ├── files │ ├── handlers │ ├── tasks │ └── vars └── old ├── files ├── handlers ├── tasks └── vars 11 directories, 0 files |

其中new为更新时用到的,old为回滚时用到的,files下面为nginx.conf和vhosts目录,handlers为重启nginx服务的命令

关于回滚,需要在执行playbook之前先备份一下旧的配置,所以对于老配置文件的管理一定要严格,千万不能随便去修改线上机器的配置,并且要保证new/files下面的配置和线上的配置一致。

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server \~# cd /usr/local/nginx/conf/ root@server conf# ls fastcgi.conf fastcgi_params.default mime.types nginx.conf.default uwsgi_params fastcgi.conf.default koi-utf mime.types.default scgi_params uwsgi_params.default fastcgi_params koi-win nginx.conf scgi_params.default win-utf root@server conf# cp nginx.conf ./vhosts root@server conf# cp -r nginx.conf vhosts /etc/ansible/nginx_config/roles/new/files/ |

定义变量

|-------------------------------------------------------------------------------------------------------------|
| root@server conf# cat /etc/ansible/nginx_config/roles/new/vars/main.yml nginx_basedir: /usr/local/nginx |

定义重新加载nginx服务

|------------------------------------------------------------------------------------------------------------------------------------|
| root@server conf# cat /etc/ansible/nginx_config/roles/new/handlers/main.yml - name: restart nginx shell: service nginx restart |

核心任务

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server conf# cat /etc/ansible/nginx_config/roles/new/tasks/main.yml - name: copy conf file copy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644 with_items: - { src: nginx.conf, dest: conf/nginx.conf } - { src: vhosts, dest: conf/ } notify: restart nginx |

定义总入口配置

|-----------------------------------------------------------------------------------------------------------|
| root@server conf# cat /etc/ansible/nginx_config/update.yml --- - hosts: nginx user: root roles: - new |

执行

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server conf# cat /etc/ansible/nginx_config/update.yml --- - hosts: nginx user: root roles: - new root@server conf# ansible-playbook /etc/ansible/nginx_config/update.yml WARNING: Invalid characters were found in group names but not replaced, use -vvvv to see details PLAY nginx ******************************************************************************************************* TASK Gathering Facts ********************************************************************************************* ok: host2 TASK new : copy conf file **************************************************************************************** changed: host2 => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'}) changed: host2 => (item={u'dest': u'conf/', u'src': u'vhosts'}) RUNNING HANDLER new : restart nginx ****************************************************************************** WARNING: Consider using the service module rather than running 'service'. If you need to use command because service is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: host2 PLAY RECAP ********************************************************************************************************* host2 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |

(2)验证结果

将80端口改为19端口执行剧本查看端口。

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server conf# cd /etc/ansible/nginx_config/roles/new/files/ root@server files# vi nginx.conf root@server files# vi nginx.conf root@server files# ansible-playbook /etc/ansible/nginx_config/update.yml WARNING: Invalid characters were found in group names but not replaced, use -vvvv to see details PLAY nginx ******************************************************************************************************* TASK Gathering Facts ********************************************************************************************* ok: host2 TASK new : copy conf file **************************************************************************************** changed: host2 => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'}) ok: host2 => (item={u'dest': u'conf/', u'src': u'vhosts'}) RUNNING HANDLER new : restart nginx ****************************************************************************** WARNING: Consider using the service module rather than running 'service'. If you need to use command because service is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: host2 PLAY RECAP ********************************************************************************************************* host2 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 root@server files# ansible all-server -m shell -a "ss -tunlp | grep nginx" WARNING: Invalid characters were found in group names but not replaced, use -vvvv to see details WARNING: Could not match supplied host pattern, ignoring: all-server WARNING: No hosts matched, nothing to do root@server files# ansible nginx -m shell -a "ss -tunlp | grep nginx" WARNING: Invalid characters were found in group names but not replaced, use -vvvv to see details host2 | CHANGED | rc=0 >> tcp LISTEN 0 128 *:19 *:* users:(("nginx",pid=6250,fd=6),("nginx",pid=6249,fd=6),("nginx",pid=6247,fd=6)) |

(3)回滚

回滚的backup.yml对应的roles为old

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| root@server files# rsync -av /etc/ansible/nginx_config/roles/new/ /etc/ansible/nginx_config/roles/old/ sending incremental file list files/ files/nginx.conf files/vhosts handlers/ handlers/main.yml tasks/ tasks/main.yml vars/ vars/main.yml sent 4,706 bytes received 127 bytes 9,666.00 bytes/sec total size is 4,183 speedup is 0.87 |

回滚操作就是把旧的配置覆盖,然后重新加载nginx服务,每次改动nginx配置文件之前先备份到old里,对应目录为/etc/ansible/nginx_config/roles/old/files

定义总入口配置

|--------------------------------------------------------------------------------------------------------------|
| root@server files# cat /etc/ansible/nginx_config/rollback.yml --- - hosts: nginx user: root roles: - old |

(4)验证结果

把配置文件的端口改为80端口之后执行new剧本查看端口。

|-------------------------------------------------------------------------------------------------------------------|
| root@server files# vi nginx.conf root@server files# ansible-playbook /etc/ansible/nginx_config/update.yml |

|----------------------------------------------------------------------------|
| root@server files# ansible nginx -m shell -a "ss -tunlp | grep nginx" |

在执行old剧本文件在查看端口

|--------------------------------------------------------------------------------|
| root@server files# ansible-playbook /etc/ansible/nginx_config/rollback.yml |

|----------------------------------------------------------------------------|
| root@server files# ansible nginx -m shell -a "ss -tunlp | grep nginx" |

看到这了给个一键三连呗谢谢各位看官,可以一起交流学习

相关文章
ansible自动化运维(一)简介及清单,模块-CSDN博客
ansible自动化运维(二)playbook模式详解-CSDN博客
ansible自动化运维(三)jinja2模板&&roles角色管理-CSDN博客
相关推荐
SkyWalking中文站1 天前
认识 Horizon UI · 6/17:Trace 探索器
运维·监控·自动化运维
火车叼位1 天前
写给初级开发者:SSL、SSH、HTTPS 与证书体系全解析
运维
小猿姐2 天前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
SkyWalking中文站2 天前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
SkyWalking中文站3 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ3 天前
Kubeneters HA Cluster部署
运维
江华森3 天前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森3 天前
Matplotlib 数据绘图基础入门
运维
江华森3 天前
NumPy 数值计算基础入门
运维
乘云数字DATABUFF7 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端