Logstash

Logstash ALogstash 介绍 Logstash 是一个开源的日志收集、处理和转发工具,通常与 Elasticsearch 和 Kibana 一起组成 Elastic Stack,用于集中式日志管理和数据分析。它支持多种数据源、数据处理及输出目标,常用于日志的收集和处理。 1. 安装 Logstash Logstash 支持多种操作系统,安装方式可以使用包管理工具、压缩包或 Docker。 a. 通过 apt 安装(以 Ubuntu 为例) 首先,添加 Elastic 的 APT 仓库: wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list' 然后,更新 APT 仓库并安装 Logstash: udo apt-get update sudo apt-get install logstash b. 使用 .tar.gz 包安装 可以从官网(https://www.elastic.co/downloads/logstash)下载压缩包,解压并安装。 tar -xvzf logstash-7.x.x.tar.gz cd logstash-7.x.x 2. 配置 Logstash Logstash 的配置文件通常由 3 个部分组成:输入(input)、过滤器(filter) 和 输出(output)。...

February 20, 2024 · 2 min · Leanku

PHP常用函数整理

PHP常用函数整理 字符串 strlen() 获取字符串长度。(一个汉字长度为3个字符,一个英文字母长度为1个字符) strpos() 在字符串内查找一个字符或一段指定的文本,返回第一次出现的位置或者false stripos() 同上,但不区分大小写 strrpos() 同上上,返回最后一次出现的位置或false strripos() 同上,但不区分大小写 explode() 字符串打散为数组 implode() 数组拼接成字符串 strtoupper() 把字符串转换为大写 strtolower() 把字符串转换为大写 ucfirst() 把单词的首字母转换成大写 lcfirst() 把单词的首字母转换为小写 ucwords() 把字符串中每个单词的首字母转换为大写 str_replace 子字符串替换 str_ireplace str_replace 的忽略大小写版本 strrev 反转字符串 trim 去除字符串首尾处的空白字符(或者其他字符) rtrim 删除字符串末端的空白字符(或者其他字符) substr 截取字符串的一部分,返回字符串的子串 substr 截取字符串的一部分(中文,需要安装扩展mbstring),返回字符串的子串 更多请参考官方文档 数组 array() 创建数组 count() 返回数组中元素的数量 sizeof() 同样效果 array_push() 将一个或多个单元压入数组的末尾(入栈) array_pop() 弹出数组最后一个单元(出栈) array_unshift() 在数组开头插入一个或多个单元 array_shift() 将数组开头的单元移出数组 shuffle() 打乱数组 reset — 将数组的内部指针指向第一个单元 end — 将数组的内部指针指向最后一个单元 current — 返回数组中的当前值 list — 把数组中的值赋给一组变量...

February 18, 2024 · 1 min · Leanku

一些PHP基础的简单整理

一些PHP基础的简单整理 常量 关于常量定义 <?php $a = 1; define("AAA".$a,"AAA"); echo constant("AAA".$a); define() 在运行时定义一个常量。 constant() 返回一个常量的值。当你不知道常量名,却需要获取常量的值时,constant() 就很有用了。也就是说,常量名储存在一个变量里,或者由函数返回时。 const不能在条件语句中定义常量。 const用于类成员变量的定义,define()不可用于类成员变量的定义,可用于全局变量。 const可在类中使用,define不能。 常量和变量的区别 常量前面没有且不能有$符号 常量可以不用理会变量的作用域,在任何地方定义和使用 常量一旦定义就不能重新定义或取消定义 常量的值只能是标量(字符串、整数、浮点数、布尔值),支持数组 获取所有常量 get_defined_constants() get_defined_constants(true) get_defined_constants(true)[‘user’] 魔术常量:它的值随着它在代码中的位置改变而变化 LINE 文件中的当前行号 FILE 文件的完整路径和文件名,包含根目录 DIR 文件所在目录 FUNCTION 该函数被定义时的名字,区分大小写 CLASS 该类被定义时的名字,区分大小写 NAMESPANCE 命名空间 METHOD 命名空间类名方法名 TRAIT 当前使用的trait的名字 包含文件 include和require的区别 include和require除了错误处理的方式不同,其他方面都是相同的。 require生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本停止运行 include生成一个警告(E_WARNING),在错误发生后脚本继续运行 面向对象(OO) 概念 面向对象是一种编程思想和方法,它将程序中的数据和操作数据的方法封装在一起,形成“对象”,并通过对象之间的交互和消息传递来完成程序的功能。 面向对象编程(OOP)强调数据的封装、继承、多态和动态绑定等特性,使得程序具有更好的可扩展性、可维护性和可重用性。 OOP特性 封装:指将对象的属性和方法封装在一起,使得外部无法直接访问和修改对象的内部状态。通过使用访问控制修饰符(public、private、protected)来限制属性和方法的访问权限,从而实现封装 继承:指可以创建一个新的类该类继承(extends)了父类的属性和方法,并且可以添加自己的属性和方法。通过继承,可以避免重复编写相似的代码,并且可以实现代码的复用。 多态:指可以使用一个父类类型的变量来引用不同子类类型的对象,从而实现对不同对象统一操作。多态可以使得代码更加灵活,具有更好的可扩展性和可维护性。在PHP中多态可通过实现接口(interface)和使用抽象类(abstract class)来实现。 类的访问控制 public(公有):公有的类成员可以在任何地方被调用。 protected(受保护):受保护的类成员可以被其自身以及其子类和父类访问。 private(私有):私有的类成员只能被其定义所在的类访问 构造方法 __construct 构造方法是一种特殊的方法,在创建一个新对象时,它会被自动调用 他可以用来 初始化 对象的属性或执行其他必要的操作 没有返回值 析构函数 __destruct...

February 18, 2024 · 2 min · Leanku

对进程、线程和协程的理解

对进程、线程和协程的理解 一、 进程 先来了解一下操作系统的进程: 操作系统对正在运行程序的抽象,这个就是进程(process)。 比如运行一个 web 浏览器,一个 text 文本,都是运行的一个一个进程。 有的人说:进程是程序运行资源的集合。进程是系统资源分配的最小单位等等。 从静态的角度来说,进程确实是运行程序的各种资源集合。 如果你进一步思考,进程里的各种资源都有哪些呢? 内存管理相关 文件系统 调度相关 信号处理 内核栈 进程各种状态 进程运行时统计信息 进程标识 等等。 可以看出,进程中的资源是相当多的。 从 Linux 操作系统对进程的定义也可以看出。 多进程:操作系统有多个程序运行,那么就有多个进程 二、 线程 《操作系统设计与实现》里说: 在传统操作系统中,每个进程中只存在一个地址空间和一个控制流(thread)。 然后,有些情况下,需要在相同地址空间中有多个控制流并行的运行,就像他们是单独的进程一样(只是他们共享相同的地址空间)。 这些控制流通常被称为线程(thread),有时也称为轻量级进程(lightweight process)。 尽管线程必须在进程中执行,但是线程和进程是可以分别对待处理的两个概念。进程用来集合资源,而线程是 CPU 调度的实体。 线程给进程模型增加的是,允许在同一个进程环境中有多个执行流,这些执行流在很大程度上相对独立。 也即是说,在进程中,程序执行的最小单位(执行流)是线程,可以把线程看作是进程里的一条执行流。 一个进程里可以有一条或多条线程。 为什么会有多线程 在一个应用程序执行过程中,应用程序里可能会有多种事件执行。 而有些事件执行一段时间后可能会被阻塞。如果把应用程序执行事件分解成多个并行运行的线程,即可以让程序设计变得简单,如果有阻塞的, 可以把这部分让出行换其他线程执行。 还有一个原因是: 线程比进程更轻量级。所以线程比进程更加容易创建,销毁。 第三个跟第一个有点关系,是关于性能的,若多线程都是 CPU 密集型的,那么不能获取性能上增强。如果有大量计算和大量 I/O 处理,那么 多线程就可以获取性能上的优势,因为允许多线程重叠执行。 多线程的缺点: 对于多线程来说,进程中的资源是共享的,所以会产生资源竞争。 当进程中的一个线程崩溃了,会导致这个进程里的其他线程也崩溃。所以有时多进程程序更好,一个进程崩溃不会导致其他进程也崩溃。 三、 进程和线程的区别 从上面进程和线程介绍知道,线程是程序执行流的最小单位,进程是操作系统分配资源的单位。 进程与进程之间关系: 进程与进程之间是相互独立的。 线程与进程关系: 线程是进程里的执行流,进程里的线程可以是一个,也可以是多个。 所有线程共享进程里一些资源,比如代码,数据,地址空间,信号处理,打开文件,全局变量等。 同时,线程也有自己的寄存器,程序计数器,堆栈,线程状态等 四、协程 协程是建立在线程之上,一般是语言级别的 ”多线程“ 模型,比线程更加的轻量级。有的叫它微线程。它是完全运行在用户态里。 协程是在线程之上在进行抽象,它需要线程来承载运行。一个线程可以有多个协程。 协程的优点:...

February 18, 2024 · 1 min · Leanku

PHP的 FPM 和 CLI

PHP的 FPM 和 CLI PHP-FPM PHP-FPM 即 PHP FastCGI 进程管理器。 要了解 PHP-FPM ,首先要看看 CGI 与 FastCGI 的关系。 CGI 的英文全名是 Common Gateway Interface,即通用网关接口,是 Web 服务器调用外部程序时所使用的一种服务端应用的规范。 早期的 Web 通信只是按照客户端请求将保存在 Web 服务器硬盘中的数据转发过去而已,这种情况下客户端每次获取的信息也是同样的内容(即静态请求,比如图片、样式文件、HTML文档),而随着 Web 的发展,Web 所能呈现的内容更加丰富,与用户的交互日益频繁,比如博客、论坛、电商网站、社交网络等。 这个时候仅仅通过静态资源已经无法满足 Web 通信的需求,所以引入 CGI 以便客户端请求能够触发 Web 服务器运行另一个外部程序,客户端所输入的数据也会传给这个外部程序,该程序运行结束后会将生成的 HTML 和其他数据通过 Web 服务器再返回给客户端(即动态请求,比如基于 PHP、Python、Java 实现的应用)。利用 CGI 可以针对用户请求动态返回给客户端各种各样动态变化的信息。 FastCGI 顾名思义,是 CGI 的升级版本,为了提升 CGI 的性能而生,CGI 针对每个 HTTP 请求都会 fork 一个新进程来进行处理(解析配置文件、初始化执行环境、处理请求),然后把这个进程处理完的结果通过 Web 服务器转发给用户,刚刚 fork 的新进程也随之退出,如果下次用户再请求动态资源,那么 Web 服务器又再次 fork 一个新进程,如此周而复始循环往复。 而 FastCGI 则会先 fork 一个 master 进程,解析配置文件,初始化执行环境,然后再 fork 多个 worker 进程(与 Nginx 有点像),当 HTTP 请求过来时,master 进程将其会传递给一个 worker 进程,然后立即可以接受下一个请求,这样就避免了重复的初始化操作,效率自然也就提高了。而且当 worker 进程不够用时,master 进程还可以根据配置预先启动几个 worker 进程等着;当空闲 worker 进程太多时,也会关掉一些,这样不仅提高了性能,还节约了系统资源。 这样一来,PHP-FPM 就好理解了,FastCGI 只是一个协议规范,需要每个语言具体去实现,PHP-FPM 就是 PHP 版本的 FastCGI 协议实现,有了它,就是实现 PHP 脚本与 Web 服务器(通常是 Nginx)之间的通信,同时它也是一个 PHP SAPI,从而构建起 PHP 解释器与 Web 服务器之间的桥梁。 PHP-FPM 负责管理一个进程池来处理来自 Web 服务器的 HTTP 动态请求,在 PHP-FPM 中,master 进程负责与 Web 服务器进行通信,接收 HTTP 请求,再将请求转发给 worker 进程进行处理,worker 进程主要负责动态执行 PHP 代码,处理完成后,将处理结果返回给 Web 服务器,再由 Web 服务器将结果发送给客户端。这就是 PHP-FPM 的基本工作原理。...

February 17, 2024 · 1 min · Leanku

Redis的数据类型及使用场景

Redis的数据类型及使用场景 一、基本数据类型 1.字符串(String) string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。 string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。 常用命令: SET key value 设置指定 key 的值。 GET key 获取指定 key 的值。 应用场景: String 是最常用的一种数据类型,普通的 key/value 存储都可以归为此类,即可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化,操作日志及 Replication 等功能。除了提供与 Memcached 一样的 get、set、incr、decr 等操作外,Redis 还提供了下面一些操作: 获取字符串长度 往字符串 append 内容 设置和获取字符串的某一段内容 设置及获取字符串的某一位(bit) 批量设置一系列字符串的内容 使用场景: 常规 key-value 缓存应用。常规计数:微博数,粉丝数。 实现方式: String 在 redis 内部存储默认就是一个字符串,被 redisObject 所引用,当遇到 incr,decr 等操作时会转成数值型进行计算,此时 redisObject 的 encoding 字段为 int...

September 1, 2023 · 7 min · Leanku

SQL语法速成

SQL语法速成 SQL 语法结构 子句 - 是语句和查询的组成成分。(在某些情况下,这些都是可选的。) 表达式 - 可以产生任何标量值,或由列和行的数据库表 谓词 - 给需要评估的 SQL 三值逻辑(3VL)(true/false/unknown)或布尔真值指定条件,并限制语句和查询的效果,或改变程序流程。 查询 - 基于特定条件检索数据。这是 SQL 的一个重要组成部分。 语句 - 可以持久地影响纲要和数据,也可以控制数据库事务、程序流程、连接、会话或诊断。 SQL 语法要点 SQL 语句不区分大小写,但是数据库表名、列名和值是否区分,依赖于具体的 DBMS 以及配置。 例如:SELECT 与 select 、Select 是相同的。 多条 SQL 语句必须以分号 ; 分隔。 处理 SQL 语句时,所有空格都被忽略。SQL 语句可以写成一行,也可以分写为多行。 SQL 支持三种注释 ## 注释1 -- 注释2 /* 注释3 */ 增删改查,又称为 CRUD,数据库基本操作中的基本操作。 插入数据 INSERT INTO 语句用于向表中插入新记录。 插入完整的行 INSERT INTO user VALUES (10, 'root', 'root', 'xxxx@163.com'); 插入行的一部分 INSERT INTO user(username, password, email)VALUES ('admin', 'admin', 'xxxx@163....

September 1, 2023 · 2 min · Leanku

Kong API网关

Kong API网关 API网关特点 集合多个API,统一API入口 避免内部信息泄露 提供安全认证 支持混合通讯协议 降低微服务复杂度 常用的API网关有:NGINX,Zuul,Kong Kong 介绍 kong是微服务中的一个网关组件,具有高可用和可扩展性,能提供易于使用的restful api来操作和配置API管理系统,同时它也可以通过负载均衡的功能把请求均匀的分发到各个服务器上,应对大量的请求。基于Nginx和OpenResty,是一个具有分布式、高性能、高并发、可伸缩…亚毫秒级延迟等特性和功能的微服务抽象层。 konga 是kong的UI界面 多用户管理 管理多个kong节点 使用快照备份,还原和迁移Kong节点 使用运行状态检查监控节点和API状态 数据库集成postgresSQL Kong 流程图 Kong 安装 Kong下载安装 Konga下载安装 API操作 文档地址 示例: 负载均衡 # 添加负载均衡 curl -i -X POST \ -H "Content-Type:application/x-www-form-urlencoded" \ -d "name=demo-upstream" \ 'http://127.0.0.1:8001/upstreams' #设置权重 curl -i -X POST \ -H "Content-Type:application/x-www-form-urlencoded" \ -d "target=127.0.0.1:8000" \ -d "weight=100" \ 'http://127.0.0.1:8001/upstreams/demo-upstream/targets' curl -i -X POST \ -H "Content-Type:application/x-www-form-urlencoded" \ -d "target=127.0.0.1:8080" \ -d "weight=500" \ 'http://127....

August 1, 2023 · 2 min · Leanku

Konga

Konga Konga的本质:Konga是一个图形化界面,它最终是通过调用你配置的 Kong Admin API 来修改Kong的配置的。 文档参考:遇到复杂场景时,最好的老师依然是Kong官方文档。 一、首次登录与初始化设置 访问Konga并注册:在浏览器中打开 http://<你的服务器IP>:1337。首次访问时,Konga会要求你注册一个管理员账户。填写用户名、邮箱和密码完成注册。 登录系统:注册成功后,Konga会自动跳转到登录页面,使用刚才注册的账号密码登录即可 二、 连接Konga与Kong网关 进入连接设置:登录成功后,你应该会看到"CONNECTIONS"或"Connections"界面。如果没有,请在左侧菜单或顶部导航栏中找到并点击 “Connections”。 填写Kong Admin API信息: Connection name:为你这个Kong连接起个名字,比如"My-Kong"或"Production"。 Kong Admin URL:这是你Kong网关的Admin API地址。非常重要! 格式通常是 http://:8001 如果你的Kong容器和Konga容器在同一个Docker网络(如 kong-net)中,你可以使用Kong的容器名和内部端口,例如:http://kong:8001。 如果你希望通过宿主机IP访问,可能需要使用宿主机的IP和映射给Kong Admin API的端口(例如 http://localhost:8001 或 http://<宿主机IP>:8001)。 激活连接:信息填写完毕后,点击 “Active” 或 “Connect” 等按钮来激活并测试连接。如果一切正常,Konga会提示连接成功。 三、 Konga核心功能与使用介绍 连接成功后,你就可以使用Konga来管理Kong了。Konga的核心功能围绕以下几个概念展开,理解它们之间的关系很重要: 概念 (Concept) 作用 (Role) 类比 (Analogy) 配置要点 (Key Configuration) Upstream 负载均衡组:代表一个虚拟主机名,用于对后端多个Target进行负载均衡。 球队的名称 Name:为Upstream命名(如 my-api-upstream)。 Target 具体目标:代表一个物理服务(IP+Port),是Upstream组内的一个具体后端实例。必须先创建Upstream,才能添加Target。 球队里的一个球员 Target:后端服务的IP或主机名及端口(如 192.168.1.100:8080)。Weight:权重,流量分配比例。 Service 服务抽象:是上游服务的抽象,可以直接指向一个具体的URL,也可以关联一个Upstream来实现负载均衡。 比赛的战术安排 Name:服务名称。Protocol:协议(HTTP/HTTPS)。Host:可填写具体URL或关联的Upstream名称。Port:端口。Path:路径(可选)。 Route 路由规则:定义客户端请求的匹配规则(如路径、域名),将匹配的请求路由到指定的Service。 根据球衣颜色决定把球传给谁 Paths:匹配的请求路径(如 /api)。Hosts:匹配的域名(可选)。Service:选择该路由要关联的Service。 四、 创建服务 (Services) 和路由 (Routes) 这是最常用的功能,用于将外部请求转发到你的后端服务。...

August 1, 2023 · 1 min · Leanku

VirtualBox+Vagrant使用

VirtualBox+Vagrant使用 一、 介绍 1. VirtualBox简介 VirtualBox是一个开源的 虚拟机管理软件,由 Oracle 开发。它的核心功能是允许你在一台物理机上运行多个虚拟机,每个虚拟机都可以装不同的操作系统。 特点: 跨平台:支持 Windows、Linux、macOS 主机上安装。 支持多种客操作系统:常见的 Linux 发行版(CentOS、Ubuntu)、Windows Server、BSD 等。 虚拟化功能: 配置虚拟 CPU、内存、磁盘、网卡等。 支持桥接网络、NAT、仅主机网络等多种网络模式。 GUI + CLI 管理:既可以用图形界面管理虚拟机,也可以用命令行 VBoxManage 控制。 适合个人和开发使用:开源免费,功能较全。 2. Vagrant简介 Vagrant 是一个虚拟机 自动化管理工具,它本身不提供虚拟化功能,而是调用 VirtualBox、VMware、Hyper-V、Docker 等“虚拟化提供者”(provider)来创建和管理虚拟机。 特点: 开发环境自动化: 通过 Vagrantfile 描述一台(或多台)虚拟机的配置,比如操作系统镜像、CPU/内存、网络、共享目录等。 跨平台一致性: 不同开发者只要用相同的 Vagrantfile,就能快速得到一模一样的开发环境,避免“在我机器上没问题”。 支持多种 Provider: 默认支持 VirtualBox,也可以配合 VMware、Hyper-V、Libvirt、Docker。 Provisioning(自动化配置): 可以在虚拟机启动时自动执行脚本(Shell、Ansible、Puppet、Chef)来安装软件和配置环境。 命令行简单: vagrant init → 生成配置文件 vagrant up → 启动虚拟机 vagrant ssh → 进入虚拟机 vagrant halt → 关闭虚拟机 vagrant destroy → 删除虚拟机...

August 1, 2023 · 4 min · Leanku