源码部署ELK日志分析管理系统

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

通常,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

通过我们需要对日志进行集中化管理,将所有机器上的日志信息收集、汇总到一起。完整的日志数据具有非常重要的作用:
1)信息查找。通过检索日志信息,定位相应的bug,找出解决方案。
2)服务诊断。通过对日志信息进行统计、分析,了解服务器的负荷和服务运行状态,找出耗时请求进行优化等等。
3)数据分析。如果是格式化的log,可以做进一步的数据分析,统计、聚合出有意义的信息,比如根据请求中的商品id,找出TOP10用户感兴趣商品。

开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成:
1)ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
在elasticsearch中,所有节点的数据是均等的。
2)Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
3)Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

为什么要用到ELK?

一般我们需要进行日志分析场景是:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

1)收集-能够采集多种来源的日志数据
2)传输-能够稳定的把日志数据传输到中央系统
3)存储-如何存储日志数据
4)分析-可以支持 UI 分析
5)警告-能够提供错误报告,监控机制

ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

日志处理步骤:

1).将日志进行集中化管理
2).将日志格式化(logstash)并存储到Elasticsearch软件中
3).对日志进行索引(Elasticsearch)
4).对前端数据进行展示(Kibana)

ELK部署

基本环境:
服务器1:node1/192.168.1.2 4G内存 安装E,K
服务器2:node2/192.168.1.3 4G内存 安装E,L,A
服务器3:Apache/192.168.1.1 2G内存 安装L

服务器1,2配置

1)设置主机名

# 服务器1改名
hostname node1
bash

# 服务器2
hostname node2
bash

2)配置域名解析(服务器1,2都配置)

vim /etc/hosts
# 添加:
192.168.1.2 node1
192.168.1.3 node2

3).监控java环境,是否为1.8版,如不满足,更新Java环境。

java -version

服务器1,2都需要安装elasticsearch软件

配置完全相同
1).安装

rpm -ivh elasticsearch-5.5.0.rpm 
systemctl daemon-reload
systemctl enable elasticsearch.service 

2).编辑elasticsearch配置文件

vim /etc/elasticsearch/elasticsearch.yml 
修改:
cluster.name: my-elk-cluster 		17//群集时使用
node.name: node1               		23//服务器2改为node2
path.data: /data/elk_data 			33行
path.logs: /var/log/elasticsearch/ 	37行
bootstrap.memory_lock: false 		43行
network.host: 0.0.0.0 				55行
http.port: 9200 					59行
discovery.zen.ping.unicast.hosts: ["node1", "node2"]  68//群集节点配置

3).创建数据存放路径并授权

mkdir -p /data/elk_data
chown -R elasticsearch:elasticsearch /data/elk_data

4).启动elasticsearch并查看是否成功启动

systemctl start elasticsearch.service 
netstat -anpt |grep 9200				//有延迟,等一会儿

5).分别在服务器1和2上查看节点信息

firefox http://192.168.1.2:9200 &
firefox http://192.168.1.3:9200 &

6).查看集群状态

# 服务器1查看群集的健康情况
firefox http://192.168.6.20:9200/_cluster/health?pretty &	
//status显示green表示节点健康运行

# 服务器2查看群集的健康情况
firefox http://192.168.6.50:9200/_cluster/health?pretty &	
//status显示green表示节点健康运行
(两台node浏览器显示)

安装elasticsearch-head插件

只服务器1安装即可
1).编译安装node-v8组件,安装时间比较长,40分钟左右

tar -zxvf node-v8.2.1.tar.gz -C /usr/src
cd /usr/src/node-v8.2.1
./configure && make && make install

2).安装phantomjs组件

tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src
cd /usr/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin/

3).安装Elasticsearch-head组件

tar -zvxf elasticsearch-head.tar.gz -C /usr/src
cd /usr/src/elasticsearch-head/
npm install							//安装依赖包

4).修改Elasticsearch主配置文件

vim /etc/elasticsearch/elasticsearch.yml
// 在最后添加:
http.cors.enabled: true						//开启跨域访问支持,默认为false
http.cors.allow-origin: "*"					//跨域访问允许的域名地址

5).重启服务

systemctl restart elasticsearch.service
cd /usr/src/elasticsearch-head/
npm run start &
netstat -lnupt |grep 9100
netstat -lnupt |grep 9200

6).测试(node2访问也是一样的)

firefox http://192.168.6.20:9100 &

node2在访问时,需要输入node1的ip地址进行连接,此时浏览器显示的信息为上下显示node-1和node-2
在这里插入图片描述

(如果node2连接不上改一下访问地址,把http://localhost:9200改成http://node1:9200)

输入:

curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type:application/json' -d '{"user":"zhang3","mesg":"hello world"}'

在浏览器中查看浏览数据,第二列多出index-demo

7、安装logstash组件(第三台)
先关闭防火墙和沙盒

systemctl stop firewalld
setenforce 0
rpm -ivh logstash-5.5.1.rpm
systemctl restart logstash.service 
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

logstash -e 'input { stdin{} } output { stdout{} }'

在加载完后输入(出现端口9600即可)

在这里插入图片描述

www.baidu.com
www.sina.com.cn

然后打断即可(ctrl+c)

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug} }'

同上在加载完后输入(出现端口9600即可)
在这里插入图片描述

www.baidu.com

输入完会出现以下几条内容

{
    
    
    "@timestamp" => 2019-10-15T11:00:59.443Z,
      "@version" => "1",
          "host" => "node1",
       "message" => "www.baidu.com"
}
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.1.2:9200"]} }'

同上在加载完后输入(出现端口9600即可)
在这里插入图片描述

www.baidu.com
www.sina.com.cn
www.google.com

chmod o+r /var/log/messages
touch /etc/logstash/conf.d/system.conf

vim /etc/logstash/conf.d/system.conf
添加:

input {
    
    
        file{
    
    
                path => "/var/log/messages"
                type => "system"
                start_position => "beginning"
                }

        }
output {
    
    
        elasticsearch {
    
    
                hosts => ["192.168.1.2:9200"]
                index => "system-%{+YYYY.MM.dd}"
                        }
        }


systemctl restart logstash

8、安装kibana组件(在node1上)

rpm -ivh kibana-5.5.1-x86_64.rpm 
systemctl enable kibana.service
systemctl start kibana.service

vim /etc/kibana/kibana.yml 
// 修改:
server.port: 5601								2行
server.host: "0.0.0.0"							7行
elasticsearch.url: "http://192.168.1.2:9200"    21行
kibana.index: ".kibana"							30行

systemctl restart kibana

测试:
firefox http://192.168.1.2:5601
进入浏览器创建索引,名字为system-*,创建完毕可以看到图标和名字下方的字段。将鼠标悬停在字段上,可以显示add。
在这里插入图片描述
在这里插入图片描述

9、服务器node2(Apache)
1).安装httpd

yum -y install httpd
# 编辑一个网页:
echo 1111111111111111 > /var/www/html/index.html

2).安装logstash组件

systemctl stop firewalld
setenforce 0

rpm -ivh logstash-5.5.1.rpm 
systemctl daemon-reload
systemctl enable logstash.service

3).编写配置文件apache_log.conf

cd /etc/logstash/conf.d

vim apache_log.conf
添加:
input {
    
    
        file{
    
    
                path => "/var/log/httpd/access_log"
                type => "access"
                start_position => "beginning"
                }
        file{
    
    
                path => "/var/log/httpd/error_log"
                type => "error"
                start_position => "beginning"
                }
        }

output {
    
    
	if [type] == "access" {
    
    
        elasticsearch {
    
    
                hosts => ["192.168.1.2:9200"]
                index => "apache_access-%{+YYYY.MM.dd}"
                        }
        }
	if [type] == "error" {
    
    
        elasticsearch {
    
    
                hosts => ["192.168.1.2:9200"]
                index => "apache_error-%{+YYYY.MM.dd}"
                        }
        }

}

systemctl restart logstash

4).刷新日志脚本

/usr/share/logstash/bin/logstash -f apache_log.conf

在加载完后输入(出现端口9600即可)
在这里插入图片描述

www.cuixiaofang.com

如果不行出不来access error 重启各种服务 主要是执行4)的步骤!!!!

firefox http://192.168.1.2:9100

浏览器可以出现apache_access和apache_error两个

firefox http://192.168.1.2:5601

可以创建apache_access和apache_error两个索引

成功!!!

猜你喜欢

转载自blog.csdn.net/qq_50573146/article/details/126913978