提示:这里可以添加计划学习的时间
例如:
1、 周一至周五晚上 7 点—晚上9点
2、 周六上午 9 点-上午 11 点
3、 周日下午 3 点-下午 6 点
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据3大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,Client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往Elasticsearch上去。
Kibana也是一个开源和免费的工具,Kibana可以为 Logstash和 ElasticSearch提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Beats在这里是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、CPU、io等资源消耗比较高。相比 Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。
任务2 基础环境配置:
|节点IP 节点规划 主机名
192.168.40.11 Elasticsearch+Kibana(主) elk-1
192.168.40.12 Elasticsearch+Logstash(数据) elk-2
192.168.40.13 Elasticsearch(数据) elk-3
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
elk-2节点:
[root@elk-2 ~]# rpm -ivh elasticsearch-6.0.0.rpm
warning: elasticsearch-6.0.0.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing… ################################# [100%]
Creating elasticsearch group… OK
Creating elasticsearch user… OK
Updating / installing…
1:elasticsearch-0:6.0.0-1 ################################# [100%]
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
elk-3节点:
[root@elk-3 ~]# rpm -ivh elasticsearch-6.0.0.rpm
warning: elasticsearch-6.0.0.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing… ################################# [100%]
Creating elasticsearch group… OK
Creating elasticsearch user… OK
Updating / installing…
1:elasticsearch-0:6.0.0-1 ################################# [100%]
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
2. 配置Elasticserach
配置elasticsearch的配置文件,配置文件:/etc/elasticsearch/elasticsearch.yml
elk-1节点:增加以下红色字样(//为解释,这里用不到的配置文件被删除),注意IP。
[root@elk-1 ~]# vi /etc/elasticsearch/elasticsearch.yml
[root@elk-1 ~]# cat /etc/elasticsearch/elasticsearch.yml
cluster.name: ELK
//配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
node.name: elk-1
//节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。
node.master: true
//指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。 其他两节点为false
node.data: false
//指定该节点是否存储索引数据,默认为true。其他两节点为true
path.data: /var/lib/elasticsearch
//索引数据存储位置(保持默认,不要开启注释)
path.logs: /var/log/elasticsearch
//设置日志文件的存储路径,默认是es根目录下的logs文件夹
network.host: 192.168.40.11
//设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。
http.port: 9200
//启动的es对外访问的http端口,默认9200
#discovery.zen.ping.unicast.hosts: [“host1”, “host2”]
discovery.zen.ping.unicast.hosts: [“elk-1”,“elk-2”,“elk-3”]
//设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
elk-2节点:
[root@elk-2 ~]# vi /etc/elasticsearch/elasticsearch.yml
[root@elk-2 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v ^# |grep -v ^$
cluster.name: ELK
node.name: elk-2
node.master: false
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.40.12
http.port: 9200
discovery.zen.ping.unicast.hosts: [“elk-1”,“elk-2”,“elk-3”]
elk-3节点:
[root@elk-2 ~]# vi /etc/elasticsearch/elasticsearch.yml
[root@elk-2 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v ^# |grep -v ^$
cluster.name: ELK
node.name: elk-3
node.master: false
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.40.13
http.port: 9200
discovery.zen.ping.unicast.hosts: [“elk-1”,“elk-2”,“elk-3”]
3. 启动服务
通过命令启动es服务,启动后使用ps命令查看进程是否存在或者使用netstat命令查看是否端口启动。命令如下:(3个节点命令相同)
[root@elk-1 ~]# systemctl start elasticsearch
[root@elk-1 ~]# ps -ef |grep elasticsearch
elastic+ 19280 1 0 09:00 ? 00:00:54 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet
root 19844 19230 0 10:54 pts/0 00:00:00 grep --color=auto elasticsearch
[root@elk-1 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1446/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1994/master
tcp6 0 0 192.168.40.11:9200 :: LISTEN 19280/java
tcp6 0 0 192.168.40.11:9300 :: LISTEN 19280/java
tcp6 0 0 :::22 :: LISTEN 1446/sshd
tcp6 0 0 ::1:25 :: LISTEN 1994/master
有以上端口或者进程存在,证明es服务启动成功。
4. 检测集群状态
使用curl命令来检查集群状态,命令如下
elk-1节点:
[root@elk-1 ~]# curl ‘192.168.40.11:9200/_cluster/health?pretty’
{
“cluster_name” : “ELK”,
“status” : “green”,
//为green则代表健康没问题,yellow或者red 则是集群有问题
“timed_out” : false,
//是否有超时
“number_of_nodes” : 3,
//集群中的节点数量
“number_of_data_nodes” : 2,
//集群中data节点的数量
“active_primary_shards” : 1,
“active_shards” : 2,
“relocating_shards” : 0,
“initializing_shards” : 0,
“unassigned_shards” : 0,
“delayed_unassigned_shards” : 0,
“number_of_pending_tasks” : 0,
“number_of_in_flight_fetch” : 0,
“task_max_waiting_in_queue_millis” : 0,
“active_shards_percent_as_number” : 100.0
}
任务4 部署Kibana
任务5 Logstash部署
{
“system-log-2020.04.09” : {
“aliases” : { },
“mappings” : {
“systemlog” : {
“properties” : {
“@timestamp” : {
“type” : “date”
},
“@version” : {
“type” : “text”,
“fields” : {
“keyword” : {
“type” : “keyword”,
“ignore_above” : 256
}
}
},
“host” : {
“type” : “text”,
“fields” : {
“keyword” : {
“type” : “keyword”,
“ignore_above” : 256
}
}
},
“message” : {
“type” : “text”,
“fields” : {
“keyword” : {
“type” : “keyword”,
“ignore_above” : 256
}
}
},
“path” : {
“type” : “text”,
“fields” : {
“keyword” : {
“type” : “keyword”,
“ignore_above” : 256
}
}
},
“type” : {
“type” : “text”,
“fields” : {
“keyword” : {
“type” : “keyword”,
“ignore_above” : 256
}
}
}
}
}
},
“settings” : {
“index” : {
“creation_date” : “1586417513863”,
“number_of_shards” : “5”,
“number_of_replicas” : “1”,
“uuid” : “ETzosODmRA2bksRXxIiabQ”,
“version” : {
“created” : “6000099”
},
“provided_name” : “system-log-2020.04.09”
}
}
}
}
5. Web界面配置
浏览器访问192.168.40.11:5601,到Kibana上配置索引:
配置完成后,选择Discover,进入“Discover”页面后,如果出现以下提示,则是代表无法查找到日志信息
这种情况一般是时间的问题,单击右上角信息切换成查看当天的日志信息。由于我虚拟机的时间是19-12-06,所以我要把时间调整到那一天。
如下图所示现在就正常了:
任务6 Logstash收集Nginx日志
Thanks for using nginx!
Please find the official documentation for nginx here:
Please subscribe to nginx-announce mailing list to get
the most important news about nginx:
Commercial subscriptions for nginx are available on:
如果解压有报错缺少包:yum install openssl-devel
[root@elk-2 ~]#
2. 配置Logstash
elk-2上:编辑Nginx配置文件,加入如下内容:
[root@elk-2 ~]# vi /etc/logstash/conf.d/nginx.conf,
input {
file {
path => “/tmp/elk_access.log”
start_position => “beginning”
type => “nginx”
}
}
filter {
grok {
match => { “message” => “%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} [%{HTTPDATE:timestamp}] “(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})” %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}”}
}
geoip {
source => “clientip”
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => [“192.168.40.12:9200”]
index => “nginx-test-%{+YYYY.MM.dd}”
}
}
使用logstash命令检查文件是否错误:
[root@elk-2 ~]# logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf --config.test_and_exit
Sending Logstash’s logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK
编辑监听Nginx日志配置文件,加入如下内容:
[root@elk-2 ~]# vi /etc/nginx/conf.d/elk.conf
server {
listen 80;
server_name elk.com;
location / {
proxy_pass http://192.168.40.11:5601;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /tmp/elk_access.log main2;
}
修改Nginx日志配置文件,增加如下内容(需注意Nginx配置文件格式):
[root@elk-2 ~]#vim /etc/nginx/nginx.conf
log_format main2 '$http_host $remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 34: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""upstream_addr” $request_time’;
[root@elk-2 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@elk-2 ~]#
[root@elk-2 ~]# systemctl start nginx
在/etc/hosts文件中添加下面信息:
192.168.40.12 elk.com
在进行下一步重启logstash 才会有Nginx的日志
浏览器访问,检查是否有日志产生。
3. Web界面配置
浏览器访问192.168.40.11:5601,到Kibana上配置索引:
配置完成后,选择Discover,进入“Discover”页面后,如果出现以下提示,则是代表无法查找到日志信息
这种情况一般是时间的问题,单击右上角内容切换成查看当天的日志信息,由于我虚拟机的时间是19-12-06,所以我要把时间调整到那一天。
任务7 使用Beats采集日志
100%[===================================>] 11,988,378 390KB/s 用时 30s
2020-03-30 22:42:24 (387 KB/s) - 已保存 “filebeat-6.0.0-x86_64.rpm.1” [11988378/11988378])
[root@elk-3 ~]# rpm -ivh filebeat-6.0.0-x86_64.rpm
2. 配置Beats
编辑配置文件:
[root@elk-3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.prospectors:
paths:
- /var/log/elasticsearch/elk.log //此处可自行改为想要监听的日志文件
output.elasticsearch:
hosts: [“192.168.40.11:9200”]
systemctl start filebeat
在elk-1主机上使用c 命令查看是否监
听到elk-3主机上的日志(出现filebeat字样表示成功)
3. Web界面配置
按照上一个步骤在浏览器中添加filebeat日志文件的监控。