一:概念
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称,具体这三个工具的详细介绍,百度都解释的很详细,今天我主要分享一下我实际中使用的问题和难点。
二:目的
简单来说就是快速查看项目错误日志,快速锁定问题。由于项目的使用用户日益剧增,一台服务器已经扛不住上万人的访问系统,导致系统访问慢,超时等问题。所以团队开始提出负载均衡以及集群的一个搭建,下个文章我会分享我在负载均衡以及配置nginx等详细文章,这里就不多介绍了。集群搭建好了就出现一个问题--日志。由于我们日志文件都是在每个集群服务器,导致系统异常,我们无法快速追踪到具体出错日志在哪台服务器,所以就开始在网上查找具体解决方案,这才看到ELK,了解了他们之间的原理后,我就开始在测试环境部署,下面是我根据自己的理解画的部署以及原理图。
三:安装环境
服务器系统:Windows server 2012 r2
Elasticsearch版本:elasticsearch-7.7.0-windows-x86_64
Logstash版本:logstash-7.7.0
Kibana版本:kibana-7.7.0-windows-x86_64
(为了产生不必要的麻烦,最好这三个版本一致。官网下载比较慢,可以去华为开源镜像站:https://mirrors.huaweicloud.com/ 下载)
四:安装步骤
将Elasticsearch、Logstash和Kibana下载后,解压。目录不要带中文。安装顺序:先安装Elasticsearch,再安装Logstash,最后安装Kibana
1、Elasticsearch的安装与配置
找到根目录的config文件夹,elasticsearch.yml进行编辑,直接添加以下内容,或者你可以找到对应的字段,将注释放开。默认是本机可以访问,因为我要其他两台也能给**Elasticsearch传输数据,所以network.host我设置为 0.0.0.0。
node.name: nodes
http.cors.enabled: true
http.cors.allow-origin: "*"
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["nodes"]
到这里Elasticsearch的配置就已经完工了,然后就是启动,根目录下bin文件下的elasticsearch.bat,以管理员身份运行就可以启动elasticsearch,启动成功后浏览器访问http://127.0.0.1:9200/,看到如下界面代表启动成功
2、Logstash的安装与配置
首先说明,它主要负责读取日志文件,然后传输给Elasticsearch,所以我们就要配置Logstash的输入(input)和输出(output),整个配置文件分为三部分:input,filter,output。下来我们就开始以这三个参数在实际应用是如何配置的。在配置的前提,我们需要创建一个logstash.conf文件,创建地址为根目录的confIg下面(或者复制logstash-sample.conf,进行名称修改)
a、input参数配置
input {
file {
type => "d_52"
start_position => "beginning"
path => "D:/_yjzfLog/yjzfWeb/debug.log"
codec => plain{charset=>"GBK"}
}
}
input {
file {
type => "e_52"
start_position => "beginning"
path => "D:/_yjzfLog/yjzfWeb/error.log"
codec => plain{charset=>"GBK"}
}
}
input的解释说明:我写了两个input,因为我要把两个日志文件分别输出,所以这块的配置是读取多个文件。type:是我定义这个文件的类型,具体用途就是对应指定的tag。start_position 检查时间戳。path 监听文件路径。codec 主要是防止乱码,当然input中有很多属性,根据具体情况指定吧。
filter的解释说明:作用是过滤匹配。我是为了过滤tag,在output中输出到哪个索引中。
filter {
grok {
match => {
"message" => '%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response:int} (?:-|%{NUMBER:bytes:int}) %{QS:referrer} %{QS:agent}'
}
}
if[type] == "d_52" {
mutate {
add_tag => ["d_52"]
}
}
if [type] == "e_52" {
mutate {
add_tag => ["e_52"]
}
}
}
output的解释说明:根据tag推送到具体elasticsearch 的索引库中。
output {
if "d_52" in [tags] {
elasticsearch {
hosts => "http://elasticsearch的ip:9200"
index => "yjzf_debug_log-%{+YYYY.MM.dd}"
codec => plain{charset=>"GBK"}
}
}
if "e_52" in [tags] {
elasticsearch {
hosts => "http://**elasticsearch的ip**:9200"
index => "yjzf_error_log-%{+YYYY.MM.dd}"
codec => plain{charset=>"GBK"}
}
}
stdout {
codec => json_lines
}
}
到这里,配置文件就完成了,然后我们启动,具体启动命令为logstash.bat -f ../config/logstash.conf(根目录的bin下执行),或者创建bat文件,把文件名改为bat,放在bin下,双击执行,就可以看到控制台读取的数据内容了。其他两台服务器,就只需要装Logstash,配置文件改一下path路径,type和tag也都改一下,标记清除是哪个台服务器的就行,为了在Kibana可以看到日志来源。
3、Kibana的安装与配置
Kibana主要是读取elasticsearch 的数据,那我们就在配置文件中配置elasticsearch 的地址就可以了,具体操作如下:
Kibana的根目录config下的kibana.yml文件,添加下列配置
server.port: 5601 #Kibana的访问端口
server.host: X.X.X.X #Kibana的访问ip(内网ip),最好不要写127.0.0.1或者localhost,其他服务器就不能访问了
elasticsearch.hosts: http://elasticsearch的ip:9200
i18n.locale: "zh-CN" #设置为中文
Kibana也就配置完了,bin目录启动kibana.bat,启动好了,浏览器访问http://配置的ip:5601,就可以了。
按照指引创建成功后,看日志
整体没有问题了,下来我们需要把Kibana和nginx结合起来,通过互联网ip访问。由于Kibana没有登录界面,我们就得借助nginx实现它的登录,配置截图如下
location / {
auth_basic "kibana login auth";
auth_basic_user_file D:/nginx/conf/passwd;# 存放密码文件路径
proxy_pass http://192.168.1.1:5601;# 转发到 kibana
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
ok,外网访问也没有问题了。结束了两天的探索,也是第一次接触ELK,从了解到实践,有点意思。