整套解决方案:搜索引擎优化工具
优采云 发布时间: 2022-10-09 02:10整套解决方案:搜索引擎优化工具
搜索引擎优化工具是优化搜索引擎功能的工具。用搜索引擎查看网站的SEO状态是最直接有效的方法,因为搜索结果可以为人们带来很多有价值的信息。搜索引擎检索结果分析是研究网站搜索引擎优化的有效方法之一。因此,搜索引擎优化工具,也称为SEO优化工具。它检查 网站 链接的数量,网站 收录 搜索的页面数,网站 的 PR 值,等等。它只能反映一定范围内某些指标的状态。应用搜索引擎优化工具的目的是测试网站对搜索引擎的友好程度及其可能的搜索排名影响。
完整的解决方案:个人开发者的服务器日志收集
个人开发者的服务器日志采集
互联网时代,数据的价值被无限强调。对于开发者来说,日志并不陌生,但不知道有多少人尝试过系统地采集和处理日志。想出一个比较简单经济的log采集解决方案。
近年来,经过各种云主机的价格战,我们的云主机越来越多,网站也越来越多。除了通过云主机管理面板或者API查询资源,还有什么办法呢?尽量不用大量编码,把不同云主机厂商的日志采集到一个地方,是不是一个好办法?
当然现在的公司一般都会配备数据团队,会使用ELK技术栈或者SPARK技术栈来进行数据ETL,但是对于个人来说,这些都太繁琐了,即使容器技术蓬勃发展,几个配置文件一个或者两条命令可以启动服务,但是有2个小问题:
ELK 本身不需要低维护和硬件资源。与*敏*感*词*相连的系统对维护和资源的要求很高。
本着省(穷)的精神,本文使用家里的宽带和一台闲置的小主机进行日志采集采集,相关资源分配,我在首页-网络-笔记中提到,一台ATOM群晖兼容机是够了,不折腾界面也可以偷懒。
数据桥
公网和家用机想要愉快地登录采集,有以下几种方式:
家庭宽带有固定IP,暴露端口到最外层路由,公网机器和家庭机器公网IP对公网IP。
家庭宽带有一个浮动IP,通过DDNS将家庭IP与域名绑定。随着IP的更新,域名也随之更新。
采用被动连接方式,将家庭内部应用流量转发到固定IP的公网机器,充当数据桥,从云主机到云主机,再从桥机转发到内网.
配置日志采集服务器
让我们先配置服务器。
在群晖web管理界面找到包中心,选择日志中心进行安装,软件安装完成后。
我们可以ssh到本机,通过ps查看进程,可以看到:
soulteary@Lemon:/$ ps -ef | grep log
system 4325 1 0 01:27 ? 00:03:09 /usr/bin/syslog-ng -F --worker-threads=4 -u system -g log
root 4747 1 0 01:27 ? 00:00:02 /usr/syno/sbin/synologaccd -f
root 4881 1 0 01:27 ? 00:00:00 /usr/syno/bin/synologrotated
soultea+ 5741 5722 0 12:06 pts/17 00:00:00 grep --color=auto log
root 11594 1 0 01:28 ? 00:00:18 /var/packages/LogCenter/target/usr/bin/syslog-ng --cfgfile=/var/packages/LogCenter/target/etc/syslog-ng/syslog-ng.conf -F --worker-threads=4
Synology 的日志系统是使用 syslog-ng 软件的服务器。看了一眼这个开源项目的仓库,了解到这个工具有数据库日志的能力,同时支持 RFC3164 和 RFC5424 风格。日志消息。
只需执行一些配置,选择文件数据库的存储位置,归档配置(synologrotated),并创建一个新的配置(syslog-ng)用于接收日志。
下面是我的配置:
名称: CloudServer
日志格式: BSD格式
规则参数: 不填
传输协议: UDP
端口: 514
SSL安全连接:不勾选
为了测试服务是否正常工作,我编写了一个简单的脚本来验证:
const os = require('os');
const syslog = require('syslog-client');
const reportHost = '10.9.8.180';
const port = 514;
const mode = 'UDP';
const facility = syslog.Facility.User;
const appName = 'Test';
const syslogHostname = os.hostname();
const severity = syslog.Severity.Informational;
const transport = (mode === 'UDP' ? syslog.Transport.Udp : syslog.Transport.Tcp);
const testTimes = 100000;
const options = {syslogHostname, transport, port, facility, appName, severity};
const logger = syslog.createClient(reportHost, options);
for (let i = 0; i < 10; i++) {
setTimeout(() => {
for (let i = 0; i < testTimes / 10; i++) {
logger.log('example message');
}
}, 10);
}
logger.on('close', () => {
console.log('socket closed');
});
logger.on('error', (error) => {
console.error(error);
});
执行脚本,尝试短时间内快速发送10万条日志,看到日志中心有实时消息进来,但数量相差很大。
将脚本中定义的发送方式改为TCP,修改接收服务器的模式,再次尝试发送。
可以看到已经采集了10w个日志,没有任何坏的。
接下来可以通过公网服务器暴露内网的日志服务,对外提供服务。
这里使用frp方法。这个方法在之前的文章中提到过,但是这次转发的不是HTTP/HTTPS协议的内容,而是TCP。
上面说到数据桥,虽然内网服务器是log采集服务器,但是在数据传输方面,它是数据桥的消费者,所以需要执行frp客户端。
以下是客户端配置的直接参考:
[common]
server_addr = 你的公网服务器地址
server_port = 公网frp服务端口
token = 连接token
dns_server = DNS服务器地址,这里填写内网DNS服务器地址
[syslog]
type = tcp
local_ip = 0.0.0.0
local_port = 514
remote_port = 公网服务器服务端口
使用方法和前面文章中提到的一样,在服务端执行服务端程序并指定配置文件,客户端也一样:
frpc -c frpc.ini
(Synology 进程保护部分稍后会添加。)
接下来我们将配置日志记录采集客户端。
日志采集客户端
在搭建日志采集的客户端和数据提供者之前,我们需要先连接网络,搭建前面提到的数据桥。
还要给出frp的服务器配置:
[common]
bind_port = 公网frp服务端口
token = 连接token
dashboard_addr = 0.0.0.0
dashboard_port = 公网管理端口
# dashboard user and passwd for basic auth protect, if not set, both default value is admin
dashboard_user = 管理用户账号
dashboard_pwd = 管理用户密码
启动服务,可以看到frp客户端和服务端显示连接成功,由于敏感信息没有贴出日志输出。
frpc -c frpc.ini
一般来说,服务器的运行是很稳定的,但是可能会因为提供者的各种原因升级或重启服务器,也可能会因为系统资源不足而杀死进程。为了保证服务的稳定性,我们使用管理工具。进一步加强这项服务。
进程守护推荐使用supervisor,先安装,然后执行:
sudo apt install supervisor -y
在/etc/supervisor/conf.d中创建frp配置文件:
[program:syslog-frp]
user=root
command=/data/syslog/frps -c /data/syslog/frps.ini
autostart=true
startsecs=3
startretries=100
autorestart=true
stderr_logfile=/data/syslog/error.log
stderr_logfile_maxbytes=50MB
stderr_logfile_backups=10
stdout_logfile=/data/syslog/access.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
重启supervisor,加载刚才创建的配置,看看配置是否加载正确。
sudo systemctl restart supervisor
sudo supervisorctl status
可以看到配置文件加载正确,frp进程被守护。
syslog-frp RUNNING pid 3781, uptime 1:09:34
好,那我们来配置日志上报服务。
刚才提到服务器支持两种协议,所以我们不必使用同一个软件,只要软件支持两种协议即可。
推荐使用rsyslog进行日志传输采集,Linux系统一般默认安装。如果没有安装,可以使用以下命令安装:
sudo apt-get install rsyslog -y
在使用它之前,您需要先检查版本。新旧版本支持的配置有些不同。
rsyslogd -version
rsyslogd 8.16.0, compiled with:
PLATFORM: x86_64-pc-linux-gnu
PLATFORM (lsb_release -d):
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
memory allocator: system default
Runtime Instrumentation (slow code): No
uuid support: Yes
Number of Bits in RainerScript integers: 64
See http://www.rsyslog.com for more information.
如果你的软件版本也是8.x,可以参考以下配置方法:
首先修改位于 /etc/rsyslog.conf 的配置文件。
# 添加或者去掉配置文件中被注释的内容
module(load="imtcp")
input(type="imtcp" port="514")
# 在文件底部添加使用TCP模式转发日志数据
*.* @@公网服务器地址:公网服务端端口
重新启动服务以使此更改生效。
service rsyslog restart
要验证服务配置是否正确,请输入测试语句:
logger -p local0.info "Hello World"
可以看到客户端可以成功接收到来自云服务器的日志消息。
如前所述,我使用 traefik 作为应用程序网关提供服务发现。
当时,输出日志被保存为文件。如何处理这种日志,再次修改位于/etc/rsyslog.conf 中的配置文件。
# 在配置顶部添加读取文件的模块,配置更新间隔为1s
module(load="imfile" PollingInterval="1")
创建一个 /etc/rsyslog.d/30-traefik.conf 配置文件,内容如下:
# proc log
$InputFileName /data/traefik/logs/access.log
$InputFileTag traefik-proc:
$InputFileStateFile stat-traefik-proc
$InputFileSeverity debug
$InputFileFaility local6
$InputFilePollInterval 1
$InputRunFileMonitor
# access log
$InputFileName /data/traefik/logs/access.log
$InputFileTag traefik:
$InputFileSeverity debug
$InputFileFaility local6
$InputFilePollInterval 1
$InputRunFileMonitor
再次重启进程后,我们发现客户端可以正确接受这些消息。
一些额外的事情要提
在类似地配置所有机器和应用程序之后,您的日志记录采集 服务就设置好了。
服务运行一段时间后,我们可以尝试简单的ETL数据操作。
此外,虽然日志文件对于“业务文件”和“业务数据”来说不一定重要,但备份也是必要的。
建议使用 Raid 或 Rsync 等解决方案合理备份数据,避免后期分析时缺少数据。
最后
我先写到这里,以后有机会再讲一下日志文件的分析和排序,以及采集服务的安全加固。