首页 > 其他分享 >运维相关问题总结

运维相关问题总结

时间:2023-08-13 23:34:20浏览次数:27  
标签:总结 运维 数据库 查询 Prometheus ansible 使用 相关 conn

*监控zabbix
1、什么是zabbix
zabbix是一个开源的网络监控、告警和分析的软件,可以监控服务器、网络设备、应用程序等,并提供实时的性能和健康状态数据,同时支持自定义的告警和通知
2、zabbix的主要特点
实时监控、自动发现、灵活的报警机制、数据收集和分析、分布式监控、自定义模板
3、zabix的监控原理
zabbix使用代理和被动方式进行监控,他通过zabbix客户端定期收集监控数据发给server端,server端将数据存储到数据库中,进行报警分析和可视化
4、如何设置zabbix报警
创建触发器,设置触发条件,关联告警动作,邮件、webhook,进行报警
5、如何监控一个网络设备和网络服务器
先在机器上安装zabbix agent,在server端创建host,添加监控项,一般添加监控的模板即可,然后创建触发器和报警
*prometheus+grafana+cmdb
1、什么是Prometheus
2、什么是grafana
3、什么是cmdb
4、Prometheus如何工作的
Prometheus 服务器定期向配置的目标发送 HTTP 请求,获取指标数据,然后存储在本地时间序列数据库中。用户可以使用 PromQL 查询语言来检索和分析这些数据。
5、grafana的主要功能
数据可视化、可定制性、多数据源支持
6、如何在grafana中创建仪表盘
7、如何在Prometheus中设置监控指标
修改 Prometheus 配置文件 prometheus.yml。
在 scrape_configs 部分添加一个 job,指定目标对象的信息,如 IP 地址和端口。
配置 metrics_path 来指定指标路径。
配置 relabel_configs 来调整标签和标签值,以便正确识别目标对象。
保存并重新启动 Prometheus 服务器。
8、什么是Prometheus数据模型
他的数据模型是基于时间序列的,每个时间序列代表一个指标的时间序列数据流,时间序列由指标名称和一组标签的唯一标识,p使用这些时间序列数据来存储和查询监控数据
9、什么是PromQL的聚合函数
PromQL是Prometheus的查询语言,支持多种聚合函数,sum avg min max count等等,这些函数可以对时序数据进行操作,以便查询和监控报警
10、如何设置Prometheus的持久化存储
配置Prometheus.yml文件,找到storage设置local.path,输入存储的绝对路径,启动Prometheus时加上 --storage.tsdb.path来指定永久存储的路径。也可以在path下面添加参数retention来指定天数,30d。
11、如何创建自定义的PromQL函数
可以通过定义 Recording Rule 来创建自定义的 PromQL 函数。Recording Rule 是一种将查询结果存储为新时间序列的方式。通过定义 Recording Rule,可以在查询中使用自定义函数
12、如何实现Prometheus的高可用
多实例部署、数据持久化存储、使用远程写入数据thanos、分布式查询、监控集群状态、自动发现和配置、水平扩展、容器化部署、定期备份和恢复
13、Prometheus的数据清理备份和恢复如何操作
tsdb wal是用来数据清理的,用法promtool tsdb wal cleanup --dir=/path/
tsdb snapshot是用来数据备份和恢复的,备份用法,创建数据快照 promtool tsdb snaoshot create --dir=/path/data,恢复promtool tsdb snapshot restore --dir=/path/data --snapshot=/path/snapshot/file
*Ansible
1、如何快速创建roles
适用ansible-galaxy快速生成,ansible-galaxy init zhoujt,会创建对应的目录结构
2、ansible常用模块及功能
文件操作:copy复制文件到目标主机,template适用jinjia2模板生成文件,file管理文件属性,lineinfile在文件中添加修改或删除指定行
包管理:apt管理Debian/Ubuntu的软件包,yum管理Centos/Redhat软件包,dnf管理最新的Fedora软件包,win_chocolatey管理Windows的软件包
服务管理:systemd管理centos7以上服务,service管理centos6以下服务,win_service管理Windows服务
用户和组:user管理用户账户,group管理用户组
远程执行:shell在目标主机执行shell命令,command在目标主机执行命令,win_shell在目标主机执行cmd、powershell命令
模板处理:template在目标主机使用jinja2模板生成文件
3、如何实现 Ansible 的动态清单
Dynamic Inventory 在ansible.cfg中指定inventory为脚本的绝对路径,可以动态获取到例如cmdb或自运维资产列表
4、如何在 Ansible Playbook 中处理错误和失败
适用failed_when关键字在任务达到一定条件时,满足条件时会标记失败
适用ignore_errors: yes 在执行任务的时候忽略错误,进行下一个任务的执行
5、如何在ansible中实现循环
使用with_items关键字在任务级别执行循环,用于遍历列表
使用register来保存循环变量的结果
6、如何在 Ansible 中处理敏感数据,例如密码和密钥
使用ansible-vault命令创建和管理加密的变量文件
在playbook中使用vars_prompt关键字从用户输入中获取敏感数据
在任务中使用no_log: true 禁止记录任务输出到日志中
7、如何在ansible中进行条件判断
when指定条件,failed_when制定失败条件,assert进行断言判断
8、在优化 Ansible 的运行效果方面,你是否熟悉不同的任务执行方式或者其他的建议
并行执行 forks:50 比如说每台机器都需要更新软件包,可以让50台机器同步执行
串行执行 serial:1 -1 -5 -7 第一次执行1二次5三次7 30%主机比,比如说升级步骤中要按照顺序依次执行任务的重启,需要限制机器同时stop的数量
异步执行 async:300  # 异步执行,返回任务 ID   poll: 10    # 每 10 秒轮询一次任务状态  比如创建虚拟机需要很长时间,然后还需要进行初始化
max_fail_percentage: 20  # 允许最多 20% 的主机失败
gather_facts: no  # 不收集主机事实信息
*MySQL
1、数据库响应变慢,如何诊断和优化?
场景:一个电商平台的用户在进行商品搜索时,发现搜索结果返回速度较慢。
答案:通过使用MySQL的慢查询日志,定位并分析慢查询语句,检查是否需要优化查询、添加索引或重构表结构。使用EXPLAIN来查看查询计划,确定是否正确使用了索引。可以考虑使用缓存技术,如Memcached或Redis,来缓存热门查询结果,从而提高响应速度。
2、数据库数据丢失,如何进行备份和恢复?
场景:一个在线学习平台的课程信息数据意外被删除,需要进行紧急恢复。
答案:设置定期的数据库备份任务,将数据备份到不同的存储介质,如磁盘或云存储。可以使用物理备份或逻辑备份,根据恢复的需求选择合适的备份策略。在数据丢失时,可以使用备份文件进行恢复,确保业务数据的安全性。
3、如何实现数据库的高可用性和故障恢复?
场景:一个金融交易系统的数据库宕机会导致交易中断,需要确保数据库高可用性。
答案:通过MySQL的主从复制或者主从同步,将主数据库的数据同步到一个或多个从数据库,实现高可用性。在主数据库宕机时,可以将其中一台从数据库提升为主数据库,保障系统的持续运行。同时,设置自动故障检测和切换,以便在发生故障时自动切换到备用节点。
4、如何进行数据库并发控制和事务管理?
场景:一个社交媒体平台上,多个用户同时进行点赞和评论操作,需要避免数据不一致或死锁问题。
答案:使用数据库事务来确保一组操作要么全部成功,要么全部失败。可以使用InnoDB引擎,它支持事务和行级锁。在代码中使用BEGIN、COMMIT和ROLLBACK语句来管理事务,确保数据的一致性。使用合适的锁机制,如共享锁和排他锁,来控制并发操作,避免数据冲突。
5、如何优化查询性能和索引使用?
场景:一个在线新闻网站的文章页面加载速度较慢,需要优化数据库查询性能。
答案:通过使用合适的索引来加速查询,可以在WHERE子句中使用列的索引,避免全表扫描。使用EXPLAIN命令来分析查询计划,确认是否正确使用了索引。可以考虑使用数据库分区来优化查询性能,将大表分割成小的分区,提高查询效率。
6、如何进行数据库的内存和磁盘管理?
场景:一个电子商务网站的数据库服务器磁盘空间不足,影响数据存储。
答案:定期监控数据库的磁盘空间使用情况,使用工具如du命令或文件系统的磁盘监控工具。删除不再需要的备份文件或日志文件,释放磁盘空间。使用合适的数据库配置参数,控制内存的使用,避免内存泄漏或过度使用。
7、如何保护数据库的安全性和权限控制?
场景:一个医疗保健应用需要保护患者的隐私数据,防止未授权访问。
答案:设置严格的数据库访问权限,只允许授权用户进行访问,可以使用GRANT和REVOKE语句进行权限管理。启用SSL/TLS来保护数据在传输过程中的安全性。定期审计数据库访问日志,监控异常活动。可以考虑使用数据库审计工具,如MySQL Enterprise Audit插件,记录数据库的操作和变更。
*SQLite
1、什么是 SQLite?在什么情况下适合使用 SQLite?   
场景:开发一个小型的离线笔记应用,需要一个轻量级的本地数据库来存储用户的笔记内容。   
答案:SQLite 是一款嵌入式关系型数据库管理系统,它以库的形式存在,无需独立的数据库服务器。适合用于小型项目、移动应用和原型开发,特别是在不需要复杂的数据库管理系统的情况下。在上述场景中,SQLite 是一个合适的选择,因为它可以在本地存储用户的笔记内容,并提供简单的查询和管理功能。
2、如何在 Python 中使用 SQLite 进行数据库操作?
场景:开发一个简单的待办事项列表应用,需要使用 Python 来管理用户的任务列表。   
答案:可以使用 Python 的内置模块 sqlite3 来与 SQLite 数据库进行交互。您可以使用该模块连接到数据库、执行 SQL 查询和更新操作,并处理返回的结果。例如,您可以使用以下代码来创建连接、插入任务并查询任务列表:
   import sqlite3
   # 连接到数据库(如果不存在则创建)
   conn = sqlite3.connect('tasks.db')
   # 创建游标对象
   cursor = conn.cursor()
   # 插入任务
   cursor.execute("INSERT INTO tasks (title, completed) VALUES (?, ?)", ('完成作业', 0))
   # 查询任务列表
   cursor.execute("SELECT * FROM tasks")
   tasks = cursor.fetchall()
   # 打印结果
   for task in tasks:
       print(task)
   # 提交更改并关闭连接
   conn.commit()
   conn.close()
3、如何使用事务来确保数据的完整性?
场景:开发一个简单的用户注册应用,需要确保用户注册信息的插入操作要么全部成功,要么全部失败。
答案:使用事务可以确保一组数据库操作要么全部成功,要么全部失败。在 Python 中,您可以使用 conn.commit() 来提交事务,或使用 conn.rollback() 来回滚事务。例如,以下代码演示了如何使用事务来插入用户注册信息:
   import sqlite3
   def register_user(conn, user_info):
       try:
           cursor = conn.cursor()
           # 开始事务
           cursor.execute("BEGIN")
           # 插入用户信息
           cursor.execute("INSERT INTO users (username, email) VALUES (?, ?)", user_info)
           # 提交事务
           conn.commit()
           print("用户注册成功!")
       except Exception as e:
           print("用户注册失败:", e)
           # 回滚事务
           conn.rollback()
   conn = sqlite3.connect('users.db')
   user_data = ('john_doe', '[email protected]')
   register_user(conn, user_data)
   conn.close()

4、如何优化 SQLite 数据库的查询性能?
场景:开发一个博客平台,用户在浏览博客列表时查询速度较慢。
答案:以下是优化查询性能的几个方法:
使用索引: 在经常查询的字段上创建索引,例如在博客标题和标签字段上创建索引,以加快查询速度。CREATE INDEX idx_name ON products (name);
合理编写查询: 避免使用过于复杂的查询,使用适当的 WHERE 子句和 JOIN 条件来过滤结果集。WHERE city = '{city}'/ JOIN orders ON customers.customer_id = orders.customer_id
分页查询: 对于长列表,使用分页查询来限制返回的结果数量,减少查询开销。SELECT * FROM employees LIMIT {page_size} OFFSET {offset}
5、如何优化 SQLite 数据库的插入性能?
场景:开发一个日志记录应用,需要高效地插入大量的日志数据。
答案: 以下是优化插入性能的几个方法:
使用事务: 将多个插入操作包装在事务中,可以显著提高插入性能。conn.execute('BEGIN') conn.execute('COMMIT') conn.execute('ROLLBACK')
批量插入: 使用 INSERT INTO ... VALUES (), (), ... 的方式插入多行数据,减少插入开销。cursor.executemany
关闭自动提交: 关闭自动提交模式,手动控制事务的提交,可以降低提交频率,提高性能。 sqlite3.connect('database.db', isolation_level=None)
6、如何优化 SQLite 数据库的存储空间?
场景:移动应用需要在设备上存储大量的用户数据,但存储空间有限。
答案:以下是优化存储空间的几个方法:
使用整数类型: 使用整数类型存储数字数据,而不是文本类型,以减少存储空间。 id INTEGER PRIMARY KEY, value INTEGER
压缩数据: 使用压缩算法对文本或二进制数据进行压缩,可以显著减少存储空间。 zlib.compress("压缩")  zlib.decompress("解压缩")
清理不必要的数据: 定期清理过期或不必要的数据,以避免数据库膨胀。  DELETE FROM TABLE WHERE CREATEED_AT < 2023-07-14
*Tomcat
1、日常优化会接触哪些
·调增连接池的配置
打开 Tomcat 的 conf/context.xml 文件。
在 <Context> 标签中添加以下配置,根据需要调整参数值:
<Resource name="jdbc/Database" auth="Container" type="javax.sql.DataSource"
    maxTotal="100" maxIdle="20" maxWaitMillis="10000"
    username="Username" password="Password"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://DBServer:3306/DatabaseName" />
·启动GZIP压缩
在 <Connector> 标签中的 compression 属性中添加以下配置:
<Connector ... compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json" />
·启用缓存
在 <Context> 标签中添加以下配置,根据需要调整参数值:
<Resources cachingAllowed="true" cacheMaxSize="100000" />
·使用cdn
·定期清理日志
#!/bin/bash
TOMCAT_LOG_DIR="/path/to/tomcat/logs"
# 清理 catalina.out 日志文件
find $TOMCAT_LOG_DIR -name "catalina.out.*" -mtime +7 -exec rm -f {} \;
# 清理其他日志文件
find $TOMCAT_LOG_DIR -name "*.log" -mtime +7 -exec rm -f {} \;
chmod +x cleanup_logs.sh
0 3 * * * /data/cleanup_logs.sh
·调优jvm参数启用JMX参数
打开 Tomcat 的 catalina.sh(或 catalina.bat)文件。
在文件开头添加以下行,根据需要调整参数值:
export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
2、如何使用Prometheus 来监控Tomcat的性能
修改 prometheus.yml 配置文件
scrape_configs:
  - job_name: 'tomcat'
    static_configs:
      - targets: ['localhost:9090']  # Tomcat 的地址和端口
重载Prometheus  curl -X POST http://localhost:9090/-/reload
配置catalina.sh
export CATALINA_OPTS="-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false"
下载 JMX Exporter,并配置涉及到的端口
*Nginx
1、如何优化
配置负载均衡
upstream backend {
    server 1.1.1.1;
    server 1.1.1.2;
}
禁用不必要的模块
./configure --without-http_gzip_module
优化ssl/tls配置  使用 ssl_session_cache 指令启用会话缓存
日志切割
#!/bin/bash
#此脚本用于自动分割Nginx的日志,access.log
#每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx-xx.log格式,并重新打开日志文件
#Nginx日志文件所在目录
LOG_PATH=/var/opt/nginx/log/nginx/
backup_path=/var/log/nginx/logs/
#获取昨天的日期
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#获取pid文件路径
PID=/var/opt/nginx/run/nginx/nginx.pid
#分割日志
mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log
#向Nginx主进程发送USR1信号,重新打开日志文件
kill -USR1 `cat ${PID}`
#定时删除7天前的log
find ${LOG_PATH}access.log -name "*.log" -type f -mtime +7 -exec rm -rf {} \;
2、Nginx 和 Apache 有什么区别?
两种常见的 Web 服务器,但在某些方面有所不同。Nginx 在高并发环境下具有更好的性能和资源利用率,适用于静态内容的服务和反向代理。Apache 则更适合动态内容和模块化配置。
3、如何实现静态内容缓存?
可以在 Nginx 配置中使用 location 块来匹配特定的 URL 路径,并使用 proxy_cache 指令配置缓存设置。
4、如何重定向 HTTP 到 HTTPS?
在 HTTP server 块中添加一个 server 块来监听 80 端口,并使用 return 301 https://$host$request_uri; 进行重定向。
*Django
如何使用Python调用ansible来执行剧本
from ansible.playbook.play import Play
from ansible.vars.manager import VariableManager
from ansible.parsing.dataloader import DataLoader
from ansible.inventory.manager import InventoryManager
from ansible.executor.playbook_executor import PlaybookExecutor
from ansible.module_utils.common.collections import ImmutableDict

# 创建 DataLoader 对象,用于加载 Ansible 配置和剧本文件
loader = DataLoader()
# 创建 InventoryManager 对象,用于管理主机清单
inventory = InventoryManager(loader=loader, sources='{}/ansible/hosts'.format(ASB_DIR))
# 创建 VariableManager 对象,用于管理变量
variable_manager = VariableManager(loader=loader, inventory=inventory)
# 创建 PlaybookExecutor 对象,用于执行剧本
playbook_path = '{}/ansible/playbook.yml'.format(ASB_DIR)
playbook = PlaybookExecutor(
    playbooks=[playbook_path],
    inventory=inventory,
    variable_manager=variable_manager,
    loader=loader,
    options=ImmutableDict(tags={}, listtags=False, listtasks=False, listhosts=False, syntax=False, connection='ssh', module_path=None, forks=100, private_key_file=None, ssh_common_args=None, ssh_extra_args=None, sftp_extra_args=None, scp_extra_args=None, become=None, become_method=None, become_user=None, verbosity=4, check=False, start_at_task=None)
)
# 执行剧本并获取结果
results = playbook.run()
# 处理执行结果
for result in results:
    print(result)
*Flask
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/hello', methods=['GET'])
def hello():
    return jsonify(message='Hello, World!')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

  

标签:总结,运维,数据库,查询,Prometheus,ansible,使用,相关,conn
From: https://www.cnblogs.com/security-guard/p/finops.html

相关文章

  • 隔板法总结
    计算不定方程的等式方程非负整数解的组数问题描述对于不定方程$a_1+a_2+a_3+\...\+a_k=g$,求解该不定方程正整数解的组数eg:$k=3,g=4$时,$①1+1+2=4\②1+2+1=4\③2+1+1=4$,所以此时是三组解问题分析问题可等效为求解将$g$个小球分成$k$......
  • 开源数据库Mysql_DBA运维实战 (修改root密码)
    本文以windows为例为大家详细介绍下MySQL修改root密码的4种方法,大家可以可以根据的自己的情况自由选择,希望对大家有所帮助方法1:用SETPASSWORD命令首先登录MySQL。格式:mysql>setpasswordfor用户名@localhost=password('新密码');例子:mysql>setpasswordforroot@localh......
  • 总结笔记1
    1.数据颗粒度,维度2.是数据量3.笛卡尔积加条件,内连接外连接等4.行转列sqlcasewhen的理解造列行转列casewhen/if列转行unionall列转换成字符串GROUP_CONCAT5.hive中MR6.hivejoin7.hivesql优化案例介绍减少处理的数据量分区裁剪,列剪裁合理的......
  • 总结笔记4
    hivesql函数字符串函数:1.length:length(stringA)2.reverse:reverse(stringA)3.concat:concat(stringA,stringB)4.concat_ws:concat_ws(stringsep,stringA,stringB)5.substring,substr:substring(stringA,intstart,intlen)6.substring_index(str,delim,count)如......
  • 总结笔记2
    关联规则AB测试聚类算法查找问题:漏斗分析横向分析小辛野子:先是一个sql,让算新增用户数,7日内的留存小辛野子:然后问了决策树算法、聚类算法、关联规则小辛野子:解释贝叶斯定理的公式小辛野子:用假设检验和置信区间解释第一类错误第二类错误小辛野子:还有各种因果推断......
  • 总结笔记5
    1.Azuredatalake,datafactory,databricks,sqlDB2.文件,DB,API的ETL经验,3.Azure权限和安全体系4.逻辑和物理分层模型5.熟练SQL能力6.具备编程能力,例如python,C#,scala7.机器学习8.Agile项目管理办法,使用azuredevOps工具进行项目实施,9.数据平台运维经验考察sql能力及基础函......
  • Linux中断底半部机制总结
    转载:Linux中断底半部机制总结-闹闹爸爸-博客园(cnblogs.com)linux实现底半部的机制主要有tasklet、workqueue、softirq和线程化irq。1.tasklettasklet的使用较为简单,它的执行上下文是软中断,所以在tasklet中不能睡眠,它的执行时机通常是中断顶半部返回的时候。我们只需要定......
  • Java相关笔记
    SpringBoot分离打包将依赖包单独放到文件夹下,生成的jar就比较小了,方便上传。同时如果你使用了Docker,页减少上传、下载镜像的流量及时间,提高部署效率原pom.xml构建部分代码<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plu......
  • I2C知识总结
    一、1.I2C接两个上拉电阻的意义节选自百度百科中高阻态电路设计人员经常使用上拉电阻以及下拉电阻(通常为1至100kΩ)让这个处于三态的节点能有确定的默认逻辑状态,防止状态不定或感染噪声。例如,I²C总线协议(一种常用的设备间双向通信的协议)在两条通信线上使用了上拉电阻。当设备......
  • 第十三章 识别相关方
    识别相关方识别相关方的过程:权力利益方格和权力影响方格:知识集锦P74(1)输出相关方登记册: 规划相关方参与规划相关方参与的过程:(1)工具与技术相关方参与度评估矩阵:相关方参与的态度:知识集锦P93(1)输出相关方参与计划: 管理相关方参与管理相关方参与的过程:......