什么是 ELK?

ELK 是 Elasticsearch、Logstash、Kibana 三大开源框架首字母大写简称。

Elasticsearch 是强大的数据搜索引擎,是分布式、通过 restful 方式进行交互的近实时搜索平台框架。

Logstash 是免费且开放的服务器端数据处理通道,能够从多个来源收集数据,转换数据后将数据发送到数据存储库中。能够动态地采集、转换和传输数据,不受格式和复杂度的影响。

Kibana 是针对 Elasticsearch 的开元分析及可视化平台,用于搜索、查看交互存储在 Elasticsearch 索引中的数据。

我们需要什么样的日志系统?

系统运维和开发人员需要通过日志(包括系统日志、程序日志、安全日志)去排查问题、分析系统运行情况、了解服务器的负荷等,以便及时采取应对措施。在分布式系统中,构建一套集中式的日志系统可以提高我们定位问题的效率。完整系统日志的特征:

收集:能够采集多种来源的日志数传输:能够稳定把数据解析过来并传输至存储系统存储:存储日志数据分析:支持UI分享警告:能够提供错误报告,有监控机制。而ELK组合就是一套完整的日志系统

先下载Elasticsearch(按那睿的可瑞死)

Elasticsearch 是使用java开发的,所以需要JVM才可以跑起来。因此我们首先要安装一下JDK(或JRE),这里Elasticsearch 的最新版本需要JDK8(JRE8)及以上。我们执行:

sudo apt-get install default-jdk来安装JDK环境。

安装完成后,我们执行

java -version

来看是否安装成功JDK安装完成后,我们就可以来下载Elasticsearch的压缩包了。(我们这里使用压缩包方式安装,还有很多其他安装方式,请自行到官网查阅)。

sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.zip

进行解压了。unzip elasticsearch-5.4.0.zip

配置Elasticsearch切换目录cd  ~/elasticsearch/data/编写 elasticsearch.yml 

sudo vim elasticsearch.yml 加上  进行配置端口号 network.host: 127.0.0.1network.bind_host: 127.0.0.1transport.tcp.port: 9300http.port: 9200再切换到cd ~/elasticsearch执行qq3175449063@node-1:~/elasticsarch/elasticsearch-5.4.0$ ./bin/elasticsearch[2021-06-29T12:57:44,238][INFO ][o.e.n.Node               ] [] initializing ...[2021-06-29T12:57:44,736][INFO ][o.e.e.NodeEnvironment    ] [9qD5p1I] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [171.7gb], net total_space [195.7gb], spins? [possibly], types [ext4][2021-06-29T12:57:44,737][INFO ][o.e.e.NodeEnvironment    ] [9qD5p1I] heap size [495.3mb], compressed ordinary object pointers [true][2021-06-29T12:57:44,979][INFO ][o.e.n.Node               ] node name [9qD5p1I] derived from node ID [9qD5p1IGRc6GnyIhVqjaRA]; set [node.name] to override[2021-06-29T12:57:44,980][INFO ][o.e.n.Node               ] version[5.4.0], pid[7768], build[780f8c4/2017-04-28T17:43:27.229Z], OS[Linux/4.15.0-142-generic/amd64], JVM[Private Build/OpenJDK 64-Bit Server VM/1.8.0_292/25.292-b10][2021-06-29T12:57:47,981][INFO ][o.e.p.PluginsService     ] [9qD5p1I] loaded module [aggs-matrix-stats][2021-06-29T12:57:47,981][INFO ][o.e.p.PluginsService     ] [9qD5p1I] loaded module [ingest-common][2021-06-29T12:57:47,981][INFO ][o.e.p.PluginsService     ] [9qD5p1I] loaded module [lang-expression][2021-06-29T12:57:47,981][INFO ][o.e.p.PluginsService     ] [9qD5p1I] loaded module [lang-groovy][2021-06-29T12:57:47,981][INFO ][o.e.p.PluginsService     ] [9qD5p1I] loaded module [lang-mustache][2021-06-29T12:57:47,982][INFO ][o.e.p.PluginsService     ] [9qD5p1I] loaded module [lang-painless][2021-06-29T12:57:47,982][INFO ][o.e.p.PluginsService     ] [9qD5p1I] loaded module [percolator][2021-06-29T12:57:47,982][INFO ][o.e.p.PluginsService     ] [9qD5p1I] loaded module [reindex][2021-06-29T12:57:47,982][INFO ][o.e.p.PluginsService     ] 访问 127.0.0.1:9200/就安装成功了出现的问题:  端口号被占用

ps -ef | grep Elasticsearch  #查看某个端口情况kill -9 pid #杀死该占用,pid如下图,如kill -9 2411

安装Logstash(不老的死打气)和nginx

  介绍logstashLogstash 是一个功能强大的工具,可与各种部署集成。 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据。 如果你的数据需要 Beats 中没有的其他处理,则需要将 Logstash 添加到部署中。 下载logstash sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.1.tar.gz 进行解压 tar zxvf logstash-7.3.1.tar.gz 安装nginx

  yum repolist

  yum install nginx  编写nginx  vi /etc/nginx/nginx.conf  nginx.conf的内容:

user www-data;worker_processes auto;

pid /run/nginx.pid;

events {        worker_connections 768;        # multi_accept on;}

http {

 upstream myserver{  server 192.168.115.128:8080;  server 192.168.115.128:8081;

} log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';

        ##        # Basic Settings        ##log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" '                     '$status $body_bytes_sent "$http_referer" '                     '"$http_user_agent" "$upstream_addr" $request_time'; server {

 listen       8088;#写内网端口,访问时用外网端口进行映射访问        server_name  localhost;

        location ~ .*\.(gif|jpg|jpeg|png)$ {            expires 24h; root  ~/images/;   proxy_store on;            proxy_store_access user:rw group:rw all:rw;            proxy_temp_path        ~/images/ ;#代理临时路径            proxy_redirect          off;#日志路径            access_log  /var/log/nginx/elk_access.log  main2; proxy_set_header        Host 127.0.0.1;            proxy_set_header        X-Real-IP $remote_addr;            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;            client_max_body_size    10m;            client_body_buffer_size 1280k;            proxy_connect_timeout   900;            proxy_send_timeout      900;            proxy_read_timeout      900;            proxy_buffer_size       40k;            proxy_buffers           40 320k;            proxy_busy_buffers_size 640k;            proxy_temp_file_write_size 640k;            if ( !-e $request_filename)            {                 proxy_pass  http://127.0.0.1:8088;#代理访问地址,和上面的端口一致            }

}

        location / {            root   html;            index  index.html index.htm;            add_header X-Frame-Options SAMEORIGIN;            proxy_set_header Host $host:$server_port;            proxy_set_header   X-Real-IP        $remote_addr;            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;#           alias  ~/images/;            try_files $uri $uri/ /index.html last;        }}

        sendfile on;        tcp_nopush on;        tcp_nodelay on;        keepalive_timeout 65;        types_hash_max_size 2048;        # server_tokens off;server{

    listen 80;

    server_name localhost;

  location / {   root ~/workspace/ruogi-ui/dist;

    index index.html index.htm;

}

}

        # server_names_hash_bucket_size 64;        # server_name_in_redirect off;

        include /etc/nginx/mime.types;        default_type application/octet-stream;

        ##        # SSL Settings        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE        ssl_prefer_server_ciphers on;

        ##        # Logging Settings        ##

        access_log /var/log/nginx/access.log mian;        error_log /var/log/nginx/error.log;

        ##        # Gzip Settings        ##

        gzip on;        gzip_disable "msie6";

        # gzip_vary on;        # gzip_proxied any;        # gzip_comp_level 6;        # gzip_buffers 16 8k;        # gzip_http_version 1.1;        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##        # Virtual Host Configs        ##

        include /etc/nginx/conf.d/*.conf;        include /etc/nginx/sites-enabled/*;}

日志log_format指令用来设置日志的记录格式,它的语法如下:log_format name format {format ...}其中name表示定义的格式名称,format表示定义的格式样式。

log_format有一个默认的、无须设置的combined日志格式设置,相当于Apache的combined日志格式,其具体参数如下:log_format combined '$remote_addr-$remote_user [$time_local]'‘"$request"$status $body_bytes_sent’ ‘"$http_referer" "$http_user_agent"’ 例如,创建一个名为mylogformat的日志格式,再$http_x_forwarded_forlog_for变量记录用户的X_Forwarded-For IP 地址:log_format mylogformat '$http_x_forwarded_for_$remote_user [$time_local]'‘"$request"$status $body_bytes_sent’ ‘"$http_referer" "$http_user_agent"’在日志格式样式中,变量$remote_addr和$http_x_forwarded_for用于记录IP地址;$remote_user用于记录远程客户端用户名称;$time_local用于记录访问时间与时区;$request用于记录请求URL与HTTP协议;$status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404;$body_bytes_sent用于记录发送客户端的文件主体内容大小;$http_referer用于记录是从哪个页面链接访问过来的;$http_user_agent用于记录客户浏览器的相关信息。  access_log /var/log/nginx/access.log mian;这个就是nginx日志保存地址

 access_log  /var/log/nginx/elk_access.log  main2;这个就是记住访问过程中的日志地址  配置成功以后

 编辑logstash 配置

 vi  ~/logstash/logstash-7.3.1/config/nginx_access.conf 内容加入input {  file {    path => "/var/log/nginx/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 => ["127.0.0.1:9200"]                        index => "nginx-test-%{+YYYY.MM.dd}"

  }}可能出现的问题1内存不够,可能logstash过于大先cd  ~/logstash/logstash-7.3.1/bin$ 再 vim logstash加入下面的 LS_JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m"2启动出现:OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000ca660000, 899284992, 0) failed; error='Cannot allocate memory' (errno=12)## There is insufficient memory for the Java Runtime Environment to continue.# Native memory allocation (mmap) failed to map 899284992 bytes for committing reserved memory.# An error report file with more information is saved as:# /home3175449063/logstash/hs_err_pid11296.log

查看内存使用情况# free -m创建swapfile# dd  if=/dev/zero  of=swapfile  bs=1024  count=500000  count=空间大小 of空间名字将swapfile设置为swap空间# mkswap swapfile启用交换空间,这个操作有点类似于mount操作# sudo swapon  swapfile (删除交换空间 swapoff swapfile)就解决了进行启动3logstash出现如下报错,是之前运行的instance有缓冲Logstash could not be started because there is already another instance using the configured data directory.  If you wish to run multiple instances, you must change the "path.data" setting.

需要进入/logstash-7.3.1/data  删除.lock 文件之后重新启动即可

cd ~/logstash/logstash-7.3.1/data && rm -rf .lock启动logstashcd ~/logstash/再sudo ./logstash-7.12.1/bin/logstash -f  logstash-7.12.1/config/nginx_access.conf

安装Kibana(k把拿)

Kibana :是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开发者或运维人员可以轻松地执行高级数据分析,并在各种图表、表格和地图中可视化数据下载wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.5-linux-x86_64.tar.gz解压tar -zxvf kibana-7.12.1-linux-x86_64.tar.gz配置文件vi   ~/kibana/kibana-7.12.1-linux-x86_64/config/kibana.yml

server.port: 5601server.host: "127.0.0.1"elasticsearch.hosts: ["http://127.0.01:9200"]i18n.locale: "zh-CN"    #kibana设置中文模式进行启动cd      vi   ~/kibana/kibana-7.12.1-linux-x86_64/

sudo ./bin/kibana[sudo] qq3175449063 的密码:   log   [03:23:15.859] [info][status][plugin:kibana@5.4.0] Status changed from uninitialized to green - Ready  log   [03:23:16.081] [info][status][plugin:elasticsearch@5.4.0] Status changed from uninitialized to yellow - Waiting for Elasticsearch  log   [03:23:16.095] [info][status][plugin:console@5.4.0] Status changed from uninitialized to green - Ready  log   [03:23:16.105] [info][status][plugin:metrics@5.4.0] Status changed from uninitialized to green - Readyhttp://127.0.0.1:5601访问127.0.0.1:5600就成功了

上面就是记录nginx日志的全过程 使用的是ELK,昨天给公司部署用了一个晚上,总结遇到问题和过程给大家,访问127.0.0.1:8088就成功了,谢谢大家的支持 介绍nginx

代理与反向代理代理服务器是位于客户端和原始服务器的一台中间服务器,为了从原始服务器获取到内容,客户端向代理服务器发送一个请求并带上目标服务器(原始服务器),代理服务器在接收到请求后就会将请求转发给原始服务器,并将从原始服务器上获取到的数据返回给客户端,代理服务器是代理的客户端,所以一般客户端是知道代理服务器的存在的,比如翻墙就用了代理服务器。

反向代理服务器是位于原始服务器端的服务器,反向代理服务器接受来自互联网的请求,然后将这些请求发送给内网的服务器,并将从内网的服务器获取结果返回给互联网上的客户端,反向代理服务器是代理的服务端,所以客户端是不知道反向代理服务器的存在的,服务端是知道反向代理服务器的。代理服务器的作用1. 访问原来无法访问的资源 2. 用作缓存,加速访问速度 3. 对客户端访问授权,上网进行认证 4. 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理服务器的作用1. 保护内网安全 2. 负载均衡 3. 缓存,减少服务器的压力 

nginx的作用1.反向代理,将多台服务器代理成一台服务器

2.负载均衡,将多个请求均匀的分配到多台服务器上,减轻每台服务器的压力,提高服务的吞吐量

3.动静分离,nginx可以用作静态文件的缓存服务器,提高访问速度

nginx的详细配置1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:配置请求的路由,以及各种页面的处理情况

Ekl去记录nginx的日志相关推荐

  1. nginx log记录请求响应日志及日志分割

    之前部署了quic的集群在aws,在测试的时候发现在大报文的情形下HTTP3的请求耗时比较不稳定,并且耗时比普通的HTTP2要大很多,就想看看请求的具体耗时有多少 请求响应日志记录 我的quic集群是 ...

  2. Nginx关于日志记录实例应用

    Nginx关于日志记录实例应用 1.Nginx不记录指定文件类型的日志 Nginx默认日志记录太详细,包括了很多图片等信息,如何设置不记录指定文件的类型的日志呢? 修改虚拟主机配置文件,使用指定的类型 ...

  3. nginx的日志格式记录真实客户端IP

    Nginx中日志文件的格式在nginx.conf中定义,其默认格式如下: log_format  main  '$remote_addr - $remote_user [$time_local] &q ...

  4. 12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间

    - 12.10 Nginx访问日志 - 12.11 Nginx日志切割 - 12.12 静态文件不记录日志和过期时间# 12.10 Nginx访问日志 - 日志的格式- vim /usr/local/ ...

  5. 调整 Docker 中 nginx 的日志级别

    调整 Docker 中 nginx 的日志级别 Intro 最近发现我们的一个应用产生了很多日志,而这些日志大多都是 nginx 的 access_log,我们默认会把标准输出收集到 es 里分析应用 ...

  6. Nginx设置日志打印post请求参数

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 我们项目的短信功能是接第三方,原来对接第三方给我们回执确认请求是get请求我们在排查问 ...

  7. Nginx 访问日志增长暴增出现尖刀的详细分析

    前言:          Nginx日志里面Mobileweb_access.log增长特别大,一天上百兆,将近100W的访问记录,按照我们目前的规模,热点用户才500个左右,就算人人用手机app访问 ...

  8. Nginx 访问日志配置

    目录 一.Nginx 访问日志介绍 二.语法及默认值 三.配置实战 1.修改配置文件 2.日志变量说明 3.真实日志分析 四.参考资料 正文 回到顶部 一.Nginx 访问日志介绍 Nginx 软件会 ...

  9. og-bin=mysql-bin_init_connect + binlog 记录 mysql 操作日志

    init_connect + binlog 记录 mysql 操作日志 简介 mysql 的 init_connect 变量是每个客户端连上数据库服务器时执行的一组数据,这组数据可以是一个或者多个sq ...

最新文章

  1. MySQL单表恢复方法
  2. Ubuntu16.04如何换pip源
  3. Boost CRC的测试程序
  4. Less 文档查看心得
  5. Android之PullToRefresh(ListView 、GridView 、WebView)使用详解和总结
  6. 关于JPA方法名创建自动查询
  7. 一键获取数据库整体信息脚本
  8. 征战FPGA之制作FLASH烧写用的bin文件
  9. MySQL 基础一(B站黑马程序员MySQL教程笔记)
  10. css与javascript小案例,使用css3和javascript开发web拾色器实例代码
  11. 交易系统开发(十二)——QuickFIX官方文档
  12. 李开复给中国大学生的第五封信—你有选择的权利
  13. CPU 是怎么认识代码的?
  14. K210(SiPEED MaixBit)MicroPython使用参考(一、软硬件环境)
  15. 电脑提示ISDone.dll错误怎么办?
  16. js 修改className
  17. Layui实现之登陆页面实现扩展模块
  18. 社交电商·生鲜行业转型方案
  19. throttle在程序中的作用
  20. android 静音接口,android 静音方法

热门文章

  1. Java配置文件学习
  2. 计算机系学生橱窗分析结果怎么写,2015年高职学生职业生涯规划书
  3. torch_points_kernels遭遇 ModuleNotFoundError: No module named ‘torch_points_kernels.points_cpu‘
  4. 人力资源管理专业知识与实务(初级)【14】
  5. ios 纯代码怎么适配ipad_iPad横竖屏下的代码适配
  6. android 呼入电话游戏闪退,光遇闪退解决方法 游戏总是闪退怎么回事
  7. 使用certbot生成https证书
  8. oracle授权v$lock,访问V$LOCK视图Oracle 11g出现性能问题
  9. re正则匹配中文字符
  10. 安装docker-ce报错