CI/CD 可观察性-基于grafana
CI/CD 可观察性-基于grafana
背景 什么是 CI/CD 可观察性,我们如何为更多可观察的管道铺平道路?可观察性不仅仅是观察错误或监控基本健康信号。相反,它会更深入,以便您可以了解系统内行为背后的“原因”。 CI/CD 可观察性在其中发挥着关键作用。这是关于深入了解持续集成和部署系统的整个管道——查看每个代码签入、每个测试、每个构建和每个部署。当您组合所有这些数据时,您可以全面了解整个软件交付过程,揭示效率领域、瓶颈和潜在故障点。 CI/CD 可观察性是可观察性的一个子集,专注于软件开发生命周期。它有助于以多种方式确保流程可靠、相关且易于理解: 积极主动解决问题。没有可观察性,我们只能对问题做出反应。有了它,我们可以在问题升级之前预见并解决问题,从而节省时间和资源。 更好的决策。通过了解 CI/CD 流程的细节,团队可以在资源分配、流程变更和工具采用方面做出更明智的决策。 建立信心。通过对 CI/CD 管道的清晰洞察,开发人员、测试人员和运营团队可以对他们发布的软件更有信心。它减少了“对部署的恐惧”并培育了持续改进的文化。 问责制和透明度。可观察性确保 CI/CD 流程的每一步都是可追溯的。这意味着,如果出现问题,可以追溯到其源头,促进问责并帮助解决根本原因,而不仅仅是解决症状。 问题 CI/CD 系统并非没有自身的挑战。破坏 CI/CD 管道平稳运行的常见问题是不稳定、性能下降和配置错误。 Flakiness 片状 片状测试是 CI/CD 方程中不可预测的变量。当测试在代码没有任何更改的情况下产生不同的结果(通过或失败)时,该测试被认为是“不稳定的”。出现片状现象通常有以下几个原因: 外部依赖和环境问题。如果这些依赖项不能始终可用,则依赖于外部服务、数据库或特定环境设置的测试可能会产生不可预测的结果。如果环境设置不正确或意外拆除,也可能会发生这种情况。从本质上讲,先前测试的残留或外部服务的不可用可能会扭曲结果,使其不可靠。 比赛条件。当系统的行为依赖于不可控事件的顺序或时间时,就会出现这种情况。特别是在异步操作中,如果管理不当,事件序列的不可预测性可能会导致偶发故障。 Performance regression 性能回归 随着 CI/CD 流程的发展并变得更加复杂,系统性能可能会开始下降。这种回归可能不会立即显现出来,但长期的累积效应可能会阻碍 CI/CD 管道的效率。以下是常见的原因: 测试执行效率低下。某些测试可能会运行比必要的时间更长的时间,这可能是因为冗余操作、设置的等待时间太长或查询效率低下。这在集成和端到端测试中尤其明显。 代码和测试膨胀。当我们添加更多功能和测试而不解决技术债务或进行优化时,我们的构建时间可能会增加。有些测试从添加之日起可能会很慢。如果不解决这些问题,整个构建和测试过程可能会比需要的时间更长。 Misconfigurations 配置错误 即使是最深思熟虑的管道也可能因配置错误而失败。这可能导致: 次优测试计划。 CI/CD 管道遵循一条关键路径,其中每个步骤都依赖于前一个步骤。如果步骤未设置为按正确的顺序执行或正在等待非依赖项,则可能会导致效率低下。 次优容量规划。未配置足够的资源或对所需工作负载规划不当可能会导致管道出现瓶颈。如果 CI/CD 流程在关键阶段没有必要的能力,则可能会减慢整个工作流程或导致中断和故障。 DORA 指标 Deployment frequency 部署频率 (DF):组织成功发布到生产环境的频率 Mean Lead time for changes 变更平均前置时间 (MLT):从代码提交到代码在生产中运行所需的时间 Mean time to recover 平均恢复时间 (MTTR):发生服务事件或缺陷后恢复服务需要多长时间 Change failure rate 变更失败率 (CFR):导致失败的变更百分比 优化 CI/CD 可观察性 目前GraCIe 是 Grafana 正在使用的应用程序插件,旨在为用户提供一种简单的方法来了解他们的 CI/CD 系统。它非常适合评估构建性能、识别测试结果中的不一致以及分析构建输出。该应用程序简化了这些流程,旨在轻松提供有关管道的见解。
Argo cd 安装和部署
Argo cd 安装和部署
Argo cd 安装和部署 Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署(CD)工具。Argo CD 可在 Git 存储库更改时自动同步和部署应用程序 安装 前提:你已经安装好了 k8s 环境,我们将在国内的k8s环境下部署argocd 1k3s kubectl create namespace argocd 2kubectl apply -n argocd -f https://github.jobcher.com/gh/https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml 检查是否正常部署 1kubectl get po -n argocd 如果没有错误的情况下应该是全部都runnning,但是如果出现argocd-repo-server CrashLoopBackOff错误有以下解决途径: 使用以下补丁修补了部署。删除后,错误消失,repo 服务器可以启动。 1apiVersion: apps/v1 2kind: Deployment 3metadata: 4 name: argocd-repo-server 5spec: 6 template: 7 spec: 8 securityContext: 9 seccompProfile: 10 type: RuntimeDefault 如果出现argocd-dex-server imagepullbackoff错误有以下解决方法: 1docker pull ghcr.io/dexidp/dex:v2.37.0 2docker tag ghcr.io/dexidp/dex:v2.37.0 harbor/dexidp/dex:v2.37.0 3docker push harbor/dexidp/adex:v2.
linux服务器进程打开文件过多导致服务异常
linux服务器进程打开文件过多导致服务异常
背景 我的logstash是多管道部署结果发现有大量日志丢失的情况查看logstash日志出现了以下报错 [2023-11-07T09:43:38,492][ERROR][logstash.javapipeline ][log] Pipeline worker error, the pipeline will be stopped {:pipeline_id=>“log”, :error=>"/var/lib/logstash/queue/log/checkpoint.head.tmp (Too many open files)", :exception=>Java::JavaIo::FileNotFoundException, :backtrace=>[“java.base/java.io.FileOutputStream.open0(Native Method)”, “java.base/java.io.FileOutputStream.open(FileOutputStream.java:298)”, “java.base/java.io.FileOutputStream.(FileOutputStream.java:237)”, “java.base/java.io.FileOutputStream.(FileOutputStream.java:187)”, “org.logstash.ackedqueue.io.FileCheckpointIO.write(FileCheckpointIO.java:105)”, “org.logstash.ackedqueue.Page.headPageCheckpoint(Page.java:202)”, 这个问题是 Logstash Pipeline 在处理数据时报错,原因是打开文件过多导致"Too many open files" 解决方法 1. 检查操作系统的文件打开数量限制,使用ulimit -n查看。如果太低,可以提高这个限制 打开 /etc/profile 增加ulimit 值 1vim /etc/profile 2## 增加,保存并退出 3ulimit -n 10240 4# 重载配置 5source /etc/profile 2. 适当增大Logstash的heap size,如-Xms和-Xmx设置为2g。 1vim /etc/logstash/jvm.option 2# 修改参数 3-Xms 2g 4-Xmx 2g 5# 重启logstash服务
使用 ElasticSearch Curator 7天定期删除日志
使用 ElasticSearch Curator 7天定期删除日志
使用 ElasticSearch Curator 7天定期删除日志 背景 Curator 是 Elastic 官方发布的一个管理 Elasticsearch 索引的工具,可以完成许多索引生命周期的管理工作。 我使用的 elasticseraech 8.0 以上的版本,所有我直接安装最新版的curator,服务器是centos 7 的 二进制安装 下载 1wget https://packages.elastic.co/curator/5/centos/7/Packages/elasticsearch-curator-5.8.4-1.x86_64.rpm 安装 curator 1rpm -ivh elasticsearch-curator-5.8.4-1.x86_64.rpm 2curator --version 进入安装文件,创建文件 1cd /opt/elasticsearch-curator 2mkdir log 3cd log 4touch run.log 创建config.yml文件在log目录下 config.yml样例如下: 配置说明参考官网说明:config.yml 1# Rmember, leave a key empty if there is no value. None will be a string, 2# not a Python "NoneType" 3client: 4 hosts: 5 - 192.168.10.17 # elasticsearch IP 地址 6 port: 9200 7 url_prefix: 8 use_ssl: False 9 certificate: 10 client_cert: 11 client_key: 12 ssl_no_validate: False 13 http_auth: elastic:password # elastic 密码,没有就不用写 14 timeout: 30 15 master_only: False 16 17logging: 18 loglevel: INFO 19 logfile: /opt/elasticsearch-curator/log/run.
sonarqube docker安装和配置
sonarqube docker安装和配置
背景 我是在ubuntu服务器安装docker服务,我已经安装好了docker和docker-compose服务,这里我就不写这些服务的安装过程,直接开始安装sonarqube服务 安装 sonarqube服务器 1.执行脚本文件 config.sh 1#!/bin/bash 2sysctl -w vm.max_map_count=262144 3sysctl -w fs.file-max=65536 4ulimit -n 65536 5ulimit -u 4096 6# # 永久改变 7# echo "vm.max_map_count=262144" >> /etc/sysctl.conf 8# sysctl -p 1sh config.sh 2.执行docker-compose文件 1version: '3' 2services: 3 postgres: 4 image: postgres:15 5 container_name: postgres 6 ports: 7 - 5432:5432 8 volumes: 9 - ./sonar/postgres/postgresql:/var/lib/postgresql 10 - ./sonar/postgres/data:/var/lib/postgresql/data 11 environment: 12 TZ: Asia/Shanghai 13 POSTGRES_USER: user #数据库用户 14 POSTGRES_PASSWORD: password #数据库密码 15 POSTGRES_DB: sonar 16 17 sonarqube: 18 depends_on: 19 - postgres 20 image: sonarqube:9.
SSH 通过 443 端口连接 GitHub
SSH 通过 443 端口连接 GitHub
背景 GitHub 提供了两种协议供用户使用 Git 连接—— SSH 和 HTTPS。理论上我可以随意选择两者之一连接到我在 GitHub 上的代码仓库,无论是将云端的仓库 clone 到本地,还是将本地的修改 push 到云端。然而,出于一些奇奇怪怪的原因,我所在的办公网络环境禁止了 22 端口,而 22 端口正是 GitHub 提供 SSH 访问的端口号。尽管可以换用 HTTPS 协议,但无论如何将我电脑上的所有代码仓库的上游都从 git@github.com:... 修改称 https://github.com/... 仍然是一个繁重的体力活。 解决 为了让Git也能通过上述端口用 SSH 访问 GitHub,我们为上述 SSH 连接方式设置一个别名。首先找到SSH的配置文件,它的路径一般是~/.ssh/config,如果这个文件不存在的话也可以创建一个。然后,在其中增加以下内容: 1Host github.com 2 HostName ssh.github.com 3 User git 4 Port 443 其中,Host 是别名,HostName 是实际的域名地址,Port 是端口号。因为我希望当我在用 SSH 连接 github.com 时,实际访问的是 ssh.github.com,所以 Host 和 HostName 分别设置成这两个域名(注意不要颠倒顺序)。 测试连接 1ssh -vT git@github.com
iOS 17 「待机显示」适配普通 iPhone(非 Pro/Max),屏幕在充电时常亮
iOS 17 「待机显示」适配普通 iPhone(非 Pro/Max),屏幕在充电时常亮
让 iOS 17 「待机显示」适配普通 iPhone(非 Pro/Max),屏幕在充电时常亮 背景 让 iPhone 14/15 Pro/Max 以下机型也可以在屏幕激活待机显示功能(充电且横置)时保持常亮,以显示小组件内容。 2023 年新发布的 iOS 17 有一个新功能:待机显示 StandBy,它能在 iPhone 横向放置且充电时,全屏显示小组件,比如时钟、日历等等,但所有的非 Pro/Max 机型,由于没有全天候显示屏(显示屏能够以低至 1 Hz 的刷新率运行),所以并不能持续使用待机显示,会在几秒钟之后熄灭屏幕,当感受到震动(轻轻拍一下桌子),或有新通知时,再次点亮。 原理 如果 iPhone 接入充电器充电 > 等待 19 秒 > 开关一次低电量模式 > 再运行一次脚本 如果没有充电 > 关闭低电量模式 > 停止脚本 之后,使用自动化功能,当 iPhone 接入充电器时,自动运行这个脚本就行了。 教程 获取链接 自带19秒等待间隔,如果遇到熄屏可以修改为15秒。 注意 小组件自动轮换失效 烧屏:请务必小心,长期使用可能会导致的屏幕问题 充电前需要手动熄屏,否则会因为不断的开关低电量模式而无法进入待机显示
GNU/Linux 一键更换系统软件源脚本
GNU/Linux 一键更换系统软件源脚本
背景 有很多小伙伴,在接受公司老项目后,想要更新服务器源时,发现镜像源失效了,手动添加也很不方便,我这里提供了一个脚本供大家使用,轻松切换镜像源。 支持系统:  Debian 8.0 ~ 12  Ubuntu 14.04 ~ 23  Kali Linux 2.0 ~ 2023  Red Hat Enterprise Linux 7.0 ~ 9  Fedora 30 ~ 38  CentOS 7.0 ~ 8.5 / Stream 8 ~ 9  Rocky Linux 8 ~ 9  AlmaLinux 8 ~ 9  OpenCloudOS 8.6 / 9.0  openEuler 21.03 ~ 23  openSUSE Leep 15 / Tumbleweed  Arch Linux all 执行命令 国内使用 1bash <(curl -sSL https://www.jobcher.com/ChangeMirrors.sh) 教育网使用 1bash <(curl -sSL https://www.
解决Elasticsearch索引只读(read-only)
解决Elasticsearch索引只读(read-only)
背景 这两天有开发向我反馈说elasticsearch有报错,嘿,我定睛一看,这不是进入只读状态了,看来是存储达到额度,我马上加个新的数据节点,平衡一下存储压力 报错信息: 1Elasticsearch Error {type:cluster_block_exception,reason:”blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];} 新建服务器,安装elasticsearch 为了和之前的服务器一样,我简单写一下我elasticsearch版本和服务器系统版本 软件 版本 centos 7.9 elasticsearch 6.7.2 JDK 1.8.61 内存 32G 安装和配置elasticsearch 使用rpm 安装 1wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.2.rpm 1rpm --install elasticsearch-6.7.2.rpm 配置参数,进入/etc/elasticsearch目录 修改配置vim elasticsearch.yml 1# ======================== Elasticsearch Configuration ========================= 2 3cluster.name: cluster-prod-es # 集群名称 4 5node.name: node-x # 节点名称 6 7path.data: /var/lib/elasticsearch # 数据存储 8 9path.logs: /var/log/elasticsearch # 日志存储 10 11network.host: 192.168.0.170 # 主机IP地址 12 13http.port: 9200 # 端口号 14 15discovery.
【福利】埃隆·马斯克传 [沃尔特·艾萨克森] 在线下载
【福利】埃隆·马斯克传 [沃尔特·艾萨克森] 在线下载
介绍 著名传记作家艾萨克森以近距离的观察视角,揭开了如今全球引人注目、富有争议性的创新企业家的神秘面纱:他善于突破常规,引领全球进入电动汽车时代、私人太空探索时代和人工智能时代,还将推特收入囊中。 埃隆·马斯克小时候在南非生活,那时他经常遭受校园欺凌,但同父亲给他造成的情感创伤相比,这些伤痛都微不足道。他的童年浸透了人性,这将他塑造为一个坚强而又脆弱的男孩,他对风险的容忍度极高,渴望营造出富有戏剧性的生活,让人类文明成为星际文明是他的宏大目标。 2008年,SpaceX的火箭在前三次发射过程中接连爆炸,特斯拉也即将破产,这是他生命中地狱般的至暗时期。在飓风来临时,他是最兴奋的人之一。动荡的环境和剧烈的冲突对他有着莫大的吸引力,有时他甚至渴望这些东西,无论是在工作中,还是在他努力维持却未能持久的恋爱关系中。每当面临艰巨的挑战,紧张感常常让他夜不能寐,甚至呕吐不止,但这些都是他赖以为生的养分。 2022年年初,也就是在SpaceX成功发射了31颗卫星、特斯拉卖出了近100万辆汽车、埃隆成为地球上最富有的人一年后,对于自己一再挑起戏剧性冲突的背后动机,他略带感伤地谈起了他的反思。 他说:“我需要改变我的思维模式,不能一直处于危机战备状态,我这种状态已经持续了大概14年,或者说我人生的大部分时间。”这更像是一个自怨自艾的评价,而不是在表达新年新气象的决心。他一边做出了这些反思和保证,一边还在秘密买入推特的股票。 两年来,艾萨克森形影不离地跟访马斯克,参加他大大小小的会议,与他一起走访工厂,深度采访了他本人,以及他的家人、朋友、同事、前妻和对手。艾萨克森揭开了马斯克内幕故事的面纱,其中有荡气回肠的胜利,也有跌宕起伏的乱局,令人拍案称奇。这些故事回答了这样一个问题:那个在马斯克心底驱使着他的恶魔,是不是也是推动创新与进步所必需的呢? 下载链接 埃隆·马斯克传 [沃尔特·艾萨克森].pdf 埃隆·马斯克传 [沃尔特·艾萨克森].epub
【破解】小鹏P5和小鹏G9开启adb和网络adb
【破解】小鹏P5和小鹏G9开启adb和网络adb
LET’S HACK NOW! 本文章可以帮助当前正式版本的小鹏P5和小鹏G9开启adb和网络adb 重要提示 如果你对第三方软件的需求高于OTA需求,请关闭OTA功能,P5和G9的下一个版本大概率或已经启用了更高级的加密方式,无法获取解锁码,需要等待其他方式破解 开启adb步骤 首先确认您的爱车是小鹏P5(OTA3.5.0及之前)或小鹏G9(OTA4.3.1及之前)或小鹏G6(未测试)或小鹏P7(OTA2.10及之前)或小鹏G3(版本不确定,最新版不行) 将您的笔记本电脑(已安装adb组件)或安卓手机(已安装甲壳虫adb软件)和您的车机连接到同一无线局域网中(此处可使用另一台手机打开热点),以下使用笔记本电脑举例 打开车机的拨号界面,输入*#9925*111#* 此时车机会显示一个页面,其中包含一个二维码 使用微信扫描您的车机的二维码,并将内容保存备用 在任意输入框中输入内容https://hackxpeng.bgcpdd.eu.org/xpeng?m=hackxpeng&id=,然后将您获取到的二维码内容复制到最后面,注意此处不要有任何的空格 使用浏览器打开您输入框中的所有内容(网址拼接,如:https://hackxpeng.bgcpdd.eu.org/xpeng?m=hackxpeng&id=XPENGD55xxxxxxxxxxxxxx) 浏览器返回一个解锁码(如:*#03*12345678*#) 将该解锁码输入车机的拨号界面,此时解锁码会自动消失,如果没有消失请手动删除所有内容 使用拨号界面输入*#9387*141#* 打开调试和网络调试(一般是前两个选项) 笔记本电脑使用win+r,输入cmd回车,输入adb connect 车机页面中的ip:5050(如adb connect 172.20.10.2:5050) cmd显示连接成功 下载你需要安装的apk 使用adb install安装软件(如:adb install C:\abc\a.apk) 安装成功 adb还有更多好玩有趣的玩法等你发现 笔记本电脑安装adb套件 打开https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn 下载windows版本 并解压 将所有文件放入c盘windows目录下的system32和syswow64 注意两个都要放 致小鹏汽车:以下是关闭获取解锁码api的步骤 将P7 P5的地图更新到高德地图最新版本(包括红绿灯倒计时,最新版高精地图,组队功能,普通道路沉浸导航,语音包等) 将P7 P5的QQ音乐更新到最新版本 承诺定期公布OTA进度(最低界限为每月公布) 将P5 p版sr下放到e版车型(显示车辆运动轨迹) 优化P7 P5 G3/i自动泊车 优化NGP并将速度上限设置为130 将P7 P5的夜晚/白天切换逻辑修改为根据光线传感器,而非日出日落时间 上线P5的智慧场景或私人定制2.0 重新评估P7 P5适配新版UI的可行性 重新评估P7更换8155车机的可行性 全部完成后使用小鹏汽车官方Github账号在本仓库发送issue 文章转载于网络,侵权即删 原文连接
Kubernetes — kubecost 分析 Kubernetes 成本
Kubernetes — kubecost 分析 Kubernetes 成本
简介 企业在上云之后,云计算基础设施支出不断创造新高,但 IT 团队却难以找到成本失控的源头,跟每一个业务沟通,所需要的资源都是必须的,降本增效无从谈起。 引入FinOps 的目标是在云上创造一种财务问责制度,每个业务团队需要根据 FinOps 团队的数据做出更加合理的配置、规划,从而在财务成本、业务稳定之间找到一种平衡。FinOps 并不是一次性、短暂的任务,而是在规划实施之后依旧需要进行持续管理,这要求企业必须设定明确的、持续的角色和责任,以保持对成本长期控制。 概念 建立对云成本的共识:企业中各个相关角色应该意识到云成本的重要性,并将成本管理纳入到决策过程中。通过提高成本意识,可以更好地控制和优化云资源的使用。 明确云成本管理的责任和角色:确定负责 FinOps 团队成员,建立相应责任制度。这样确保有专门人员负责云成本的监控、分析和优化,从而提高整体的财务管理效果。 提供培训和教育资源:培训企业成员了解成本管理的基本概念、工具和技术。这有助于增强团队的能力,使他们能够更好地理解和应对云成本挑战。 促进不同团队之间的合作:财务团队、开发团队和运维团队应该紧密合作,共同制定和实施成本管理策略。通过协作,可以更好地理解业务需求、优化资源配置,并确保成本管理策略与业务目标相一致。 利用自动化技术提高效率和准确性:通过采用自动化工具收集、分析和报告云成本数据。自动化还可以帮助实现实时监控和警报,以及自动化资源管理,从而提高成本管理的效率和准确性。 使用 kubecost 分析 Kubernetes 成本 接下来我们展开今天的具体内容,如何使用 kubecost 分析 Kubernetes 成本。 kubecost 是目前较优秀的开源 Kubernetes 成本分析工具,它提供了丰富的功能和仪表板,帮助用户更好地理解和控制其容器化工作负载的成本。 kubecost 目前支持 阿里云、AWS 等云厂商对接,它能够提供集群中命名空间、应用等各类资源成本分配,用户还可以基于这些信息在 Kubecost 中设置预算和警报,帮助运维和财务管理人员进一步实现成本管理。 安装 Kubecost 安装 Kubecost 建议使用 Helm 进行安装,使用以下命令: 1helm repo add kubecost https://kubecost.github.io/cost-analyzer/ 2helm repo update 3helm upgrade --install kubecost kubecost/cost-analyzer --namespace kubecost --create-namespace 几分钟后,检查以确保 Kubecost 已启动并运行: 1kubectl get pods -n kubecost 2# Connect to the Kubecost dashboard UI 3kubectl port-forward -n kubecost svc/kubecost-cost-analyzer 9090:9090 现在可以打开浏览器并指向 http://127.