整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

小白前端学习日记:HTML基础语法与标签1

小白前端学习日记:HTML基础语法与标签1

.HTML的骨架

在编写html时我们们首先要写出以下代码。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>

</body>
</html>


不要被这一大长串吓到,在VSCode编译器中html文件第一行打出“!”便会自动得到这些代码。我们来认识一下这些标签都是什么。

<!DOCTYPE html> 

html文件第一行必须是DTD(Document Type Definition,文档类型声明),不写DTD会引发浏览器的一些兼容问题。

<html lang="en">
.
.
.
</html>


<html></html>标签对,将<head></head>标签对和<body></body>标签对放入其中,lang属性为网页语言,英语为en,中文为zh。

注意:head标签对和body标签对需要在html标签对中缩进

<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>

</body>
</html>


<head></head>标签对中是网页的配置,而并非网页头部

head标签对中<meta charset="UTF-8">为设置字符集,<meta>标签为元标签,表示网页的基础配置;

UTF-8为制作网页所使用的字符集,与gb2312的区别可参考下图。


<head></head>中的<title></title>中书写网页的标题,文字会显示在浏览器的标签栏上。title也是搜索引擎收录网站时显示的标题,所以我们需要合理的设置title以吸引用户的点击。

使用meta标签设置网页关键词和描述,name属性非常关键,用来设置meta的具体功能。

<meta name="Keywords" content="关键词1,关键词2,关键词3">
<meta name="Description" content="页面描述是搜索引擎显示的简介词语">

<body></body>标签对中用来写网页的主要内容,包括网页头部,内容,页脚等等。


2、标签

html叫做“超文本标记语言”,超文本标记就是标签,这些标签拥有不同的功能。

标签通常成对儿出现;但meta标签为单标签,只有起始标签。

标签可以给文字设置不同的“语义”。

1.标题标签

<h1>一级标题</h1><h2>二级标题</h2><h3>三级标题</h3><h4>四级标题</h4><h5>五级标题</h5>    <h6>六级标题</h6>

实际显示效果如图。

搜索引擎非常看重<h1></h1>标签的内容,应该将重点内容比如网页的logo等放到<h1></h1>中以加大其权重。<h1></h1>标签一般只能放置一个,否则会被搜索引擎视为作弊。

六级标题虽然很像普通文本进行了加粗,但不应该仅仅为了加粗而使用<h6></h6>标签对。


2.段落标签——p标签对

<p>段落标签,p是英语paragraph的意思</p><p>在HTML文件中即使代码换行了,页面显示效果也不会换行</p><p>所以必须要把任何段落都放入段落标签中</p>    <p>段落标签中不能嵌套标题标签和其他段落标签</p>

在网页中显示的效果如图。


3.div标签

div是英语division“分割”的缩写,<div></div>标签对用来将相关的内容组合到一起,以和其

他内容分割,使文档结构更清晰。最重要的一点是,它可以结合CSS使用,实现网页的布局,这种布局形式叫做“DIV+CSS”。

div标签对的应用是html中非常重要的知识点。

<div>
<h3>标题三</h3>
<p>段落1</p>
<p>段落2</p>
<p>段落3</p>
    </div>


4.注释与转义字符

书写代码时,我们需要写好注释使日后再阅读代码或者他人阅读代码提供提示。

为了在书写“<”“>”等符号时不被当作标签,我们需要使用转义字符来表示它们。

<!-- 注释内容 -->
<p><为小于号</p>
<p>>为大于号</p>
<p> 为不会被折叠的空格</p>
    <p>?为版权符号</p>


在网页中显示的效果如图。


总结

通过此次的学习,我们认识了html骨架,标题标签,段落标签,div标签,注释写法与部分转义字符写法。下次的学习内容将会是列表标签和多媒体语义化标签。

统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对用户了解系统的运行状态是非常有用的,所以需要把它们保存到对应的日志文件中,以便后续进行分析和监控系统或软件的状态。 Linux 系统拥有非常灵活和强大的日志功能,几乎可以保存所有的操作记录,并可以从中检索出我们需要的信息。完成这个工作的守护进程就是 rsyslog。

介绍

谈及 rsyslog[1],就不可避免的涉及另外两个软件 syslog[2]syslog-ng[3]。这三款软件设计的目标是一样的,就是解决系统和程序的日志收集问题。每一个项目都在试图提高前者的稳定性和功能性。

syslog

syslog 由 Eric Allman 在 1980 年代开发,是 Sendmail 项目的一部分。因为它的易用性被很多类 Unix 系统使用,成为其标准的日志记录解决方案。在这个过程中,它演变成一种协议,成为在互联网协议(TCP/IP)的网络中传递记录档消息的标准。

syslog 协议属于一种主从式协议:syslog 发送端会发送出一个小的文字消息(小于 1024 位组)到 syslog 接收端。接收端通常名为 syslogd、syslog daemon 或 syslog 服务器。系统日志消息可以被以 UDP 协议或 TCP 协议来发送。这些资料是以明码类型被发送。不过由于 SSL 加密外套(例如 Stunnel、sslio 或 sslwrap 等)并非 syslog 协议本身的一部分,因此可以被用来透过SSL/TLS 方式提供一层加密。

syslog-ng

syslog-ng 是 syslog NextGeneration 的简写。该项目发起于 1998 年并基于 syslog 协议开发。作为 syslog 的下一代产品,功能肯定比 syslog 强大的多,如高性能,可靠的传输,支持多平台,高可靠性,众多的用户群体,强大的日志过滤及排序,事件标签和关联性,支持最新的IETF标准等。

rsyslog

rsyslog 是 the rocket-fast system for log processing 的简写。该项目始于 2004 年,当时 rsyslog 的主要作者 Rainer Gerhards 决定编写一个新的强大 syslog 守护程序来与 syslog-ng 竞争。它实现了基本的 syslog 协议,并扩展了基于内容的过滤功能,丰富了过滤能力,处理脱机输出的队列操作,支持不同模块的输出,配置选项更加灵活,并添加了使用 TCP 进行传输的功能。

由于 rsyslog 的高性能,出色的安全性和模块化设计,它不仅作为常规的系统日志收集工具,还能够接受各种来源的输入,将其转换,然后将结果输出到不同的目的地。

它的优势有如下:

? 高性能(使用 C 编写,运用多线程)

? 支持 TCP, SSL, TLS, RELP

? 支持多种输出(MySQL, PostgreSQL等)

? 支持对系统日志的过滤

? 灵活配置多种输出

正因为如此,它是众多类 Unix 系统和 GNU/Linux 发行版系统日志采集的首选。

syslog 协议

既然三款软件都基于 syslog 协议,那就先来介绍一下 syslog 协议。相关 RFC 文件有 2001 年发行的RFC 3164[4](The BSD syslog Protocol), 2009 年发行的 RFC 5424[5](The Syslog Protocol), RFC 5425[6](Transport Layer Security Mapping for Syslog),RFC 5426[7](Transmission of Syslog Messages over UDP)。其中RFC 3164 已经被 RFC 5424 废除,所以下面介绍的以 RFC 5424 为准。

三层模型

Syslog 协议使用三层结构,第一层是消息层,指要传输的信息;第二层是应用层,主要用于消息的生成,解析,路由和存储,代表有发送者,中继器和接受者。第三层是传输层,主要用于发送和接收网络上的信息,代表有发送设备和接收设备。 具体的层次结构见下图(这块的理解可以参考 OSI 7层模型或 TCP/IP 4层模型):

部署场景

syslog 协议遵循以下的原则:

? 协议没有信息确认机制 消息从发送者发送到接受者的 UDP 514 端口,不需要接收方应答。

? 发送者和中继器可以将相同的消息发送给多个接收者和中继器

? 发送者,中继器和接收者可以部署在同一个系统上。

按照上述原则,有如下图的部署场景。

消息格式

syslog 协议定义了消息格式,由三部分组成:消息头 HEADER ,结构化数据 STRUCTURED-DATA 和消息 MSG(可选)。其中消息头又包含优先级(PRIority),版本号(VERSION),时间戳(TIMESTAMP),主机名(HOSTNAME), 应用名(APP-NAME),进程标识(PROCID)和消息标识(MSGID)。

其中优先级由设备(Facility)和严重性(Severity)共同决定。PRI=Facility * 8 + Severity。 设备的可选值有以下24个:

代号

设备(Facility)

注释

0

kernel messages

内核相关

1

user-level messages

用户相关(默认)

2

mail system

邮件相关

3

system daemons

系统守护进程相关

4

security/authorization messages (note 1)

登陆授权相关

5

messages generated internally by syslogd

syslogd相关

6

line printer subsystem

打印相关

7

network news subsystem

新闻相关

8

UUCP subsystem

unix到unix的cp相关

9

clock daemon (note 2)

任务计划相关

10

security/authorization messages (note 1)

登陆授权相关

11

FTP daemon

FTP相关

12

NTP subsystem


13

log audit (note 1)

登陆授权相关

14

log alert (note 1)

登陆授权相关

15

clock daemon (note 2)

任务计划相关

16

local use 0 (local0)

用户自定义0

17

local use 1 (local1)

用户自定义1

18

local use 2 (local2)

用户自定义2

19

local use 3 (local3)

用户自定义3

20

local use 4 (local4)

用户自定义4

21

local use 5 (local5)

用户自定义5

22

local use 6 (local6)

用户自定义6

23

local use 7 (local7)

用户自定义7

严重性的可选值有以下8个,这也是Facility * 8的原因:

代号

严重性(Severity)

注释

0

Emergency: system is unusable

崩溃级别

1

Alert: action must be taken immediately

报警级别

2

Critical: critical conditions

危急级别

3

Error: error conditions

错误级别

4

Warning: warning conditions

警告级别

5

Notice: normal but significant condition

提示级别

6

Informational: informational messages

消息级别

7

Debug: debug-level messages

调试级别

其它注意点

? 协议的实现必须支持基于 TLS 的传输,应该支持基于 UDP 的传输

? 所有接收设备必须能够结构长度不超过480个八位字节的消息,应该接收长度最大为2048个八位字节的消息,可以接收超过2048个八位字节的消息(可以截断或丢弃)。

rsyslog 使用

鉴于 rsyslog 已经是众多类 Unix 系统和 GNU/Linux 发行版系统日志采集的首选,所以这里重点介绍一下 rsyslog 使用。

配置文件

一般 rsyslog 的配置文件在 /etc/rsyslog.conf, 其由 3 个部分组成:模块(MODULES),全局设置(GLOBAL DRICTIVES)和规则(RULE)。这里以 Centos 中 rsyslog 配置为例。

# rsyslog configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### 模块MODULES ####

# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
#$ModLoad imklog # reads kernel messages (the same are read from journald)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514


#### 全局设置GLOBAL DIRECTIVES ####

# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on

# File to store the position in the journal
$IMJournalStateFile imjournal.state


#### 规则RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log


# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###

每次修改配置文件后可以通过以下操作来判断配置文件是否合理并重启 rsyslogd 服务。

# 验证配置文件 /etc/syslog.conf 是否合理
rsyslogd -f /etc/rsyslog.conf -N1
# 重启 rsyslog 服务
systemctl restart rsyslog

基本验证

一般系统都会提供 logger 命令行,可以使用其向系统输入日志。

# -i 记录进程id
# -t 标识记录的tag
# -p 指定消息的设备信息和日志等级,默认user.info
logger -i -t 'hjy_test' -p facility.level 'message'

实战

网上有一篇博文[8]是介绍将 rsyslog 的日志输出到 mysql 中,当然强大的 rsyslog 不仅支持输出到 mysql 中,基本覆盖了所有的主流存储软件。 不过这里介绍的实战是利用 rsyslog 的用户自定义设备来实现推荐系统的用户行为收集。大体的思路是推荐请求或数据上报请求通过 nginx 将请求转发到多台 online 服务中的一个。 该服务处理完请求后会将推荐的数据或打点上报的数据通过 SyslogHandler 汇总到目标服务器上进行推荐系统用户行为的统一处理。具体架构见下图:

优势如下:

? 速度快,稳定性高,性能好(支持百万QPS,压测到十万级别[9])

? rsyslogd 一般服务器自带,不需要安装,只需简单配置

? 客户端实现简单,比如 Python 中 logger 就有 SyslogHandler 来向 rsyslogd 发送日志。

参考文献

1.rsyslog官网[10]

2.rsyslog源码[11]

3.维基百科syslog[12]

4.维基百科rsyslog[13]

5.维基百科syslog-ng[14]

6.三种syslog比较[15]

7.rfc3164[16]

8.rfc5424[17]

9.rfc5425[18]

10.rfc5426[19]

11.rsyslog配置[20]

12.记录rsyslog日志到mysql[21]

13.rsyslog 的 TCP 转发性能测试[22]

References

[1] rsyslog: https://en.wikipedia.org/wiki/Rsyslog
[2] syslog:
https://zh.wikipedia.org/wiki/Syslog
[3] syslog-ng:
https://en.wikipedia.org/wiki/Syslog-ng
[4] RFC 3164:
https://tools.ietf.org/html/rfc3164
[5] RFC 5424:
https://tools.ietf.org/html/rfc5424
[6] RFC 5425:
https://tools.ietf.org/html/rfc5425
[7] RFC 5426:
https://tools.ietf.org/html/rfc5426
[8] 博文:
https://www.codenong.com/cs105581064/
[9] 压测到十万级别:
http://chenlinux.com/2015/02/12/rsyslog-forwarder-testing/

天来分享一个有趣的内容,通过 Python + WebSocket + Js 来实现服务监控日志的实时输出,当服务正常时,在页面上实时展示出 OK;当服务不正常时,在页面上会实时展示出加粗的红色内容。分享的内容划分成四部分。


第一部分:HTML 部分

如图所示,红框的 onclick 方法调用到了 js 方法。

第二部分:JS 部分的代码

这里会与后端的 WebSocket Server 建立连接,并将 env 这个变量(参数)传到后端,然后后端会根据 env 来进行服务的检测,然后返回一个响应给到 js,最后 js 拿到了响应后进行追加到我们定义的一个 div 里面,这里也体现了一个实时的服务日志监控展示。

第三部分:WebSocket Server 部分

这里拿到了前端 js 传过来的参数 env,进行环境的匹配,然后遍历每一个服务的请求,再根据请求返回的结果拼接一个 response 给到 js,如下图红框中所示:

第四部分:页面效果展示

总结:

整体上思路要清晰,html 里面通过 onclick 方法调用到 js,js 通过与后端的 WebSocket Server 建立连接,连接后会根据传入的参数来确定检测哪个环境的服务,WebSocket Server 将检测的结果实时返回给 js 处理,js 将结果实时的追加到 html 页面的一个 div 元素中,至此就全部结束了。