1. 程式人生 > >Docker安裝ELK並實現JSON格式日誌分析

Docker安裝ELK並實現JSON格式日誌分析

ELK是什麼

ELK是elastic公司提供的一套完整的日誌收集以及前端展示的解決方案,是三個產品的首字母縮寫,分別是ElasticSearch、Logstash和Kibana。

其中Logstash負責對日誌進行處理,如日誌的過濾、日誌的格式化等;ElasticSearch具有強大的文字搜尋能力,因此作為日誌的儲存容器;而Kibana負責前端的展示。

ELK搭建架構如下圖:

加入了filebeat用於從不同的客戶端收集日誌,然後傳遞到Logstash統一處理。

ELK的搭建

因為ELK是三個產品,可以選擇依次安裝這三個產品。

這裡選擇使用Docker安裝ELk。

Docker安裝ELk也可以選擇分別下載這三個產品的映象並執行,但是本次使用直接下載elk的三合一映象來安裝。

因此首先要保證已經有了Docker的執行環境,Docker執行環境的搭建請檢視:https://blog.csdn.net/qq1311256696/article/details/85277220

拉取映象

有了Docker環境之後,在伺服器執行命令:

docker pull sebp/elk

這個命令是在從Docker倉庫下載elk三合一的映象,總大小為2個多G,如果發現下載速度過慢,可以將Docker倉庫源地址替換為國內源地址。

下載完成之後,檢視映象:

docker images

Logstash配置

/usr/config/logstash目錄下新建beats-input.conf,用於日誌的輸入:

input {
  beats {
    port => 5044
  }
}

新建output.conf,用於日誌由Logstash到ElasticSearch的輸出:

output {
  elasticsearch {
    hosts => ["localhost"]
    manage_template => false
    index => "%{[@metadata][beat]}"
  }
}

其中的index為輸出到ElasticSearch後的index

執行容器

有了映象之後直接啟動即可:

docker run -d -p 5044:5044 -p 5601:5601 -p 9203:9200 -p 9303:9300 -v /var/data/elk:/var/lib/elasticsearch -v /usr/config/logstash:/etc/logstash/conf.d --name=elk sebp/elk

-d的意思是後臺執行容器;

-p的意思是宿主機埠:容器埠,即將容器中使用的埠對映到宿主機上的某個埠,ElasticSearch的預設埠是9200和9300,由於我的機器上已經運行了3臺ElasticSearch例項,因此此處將對映埠進行了修改;

-v的意思是宿主機的檔案|資料夾:容器的檔案|資料夾,此處將容器中elasticsearch 的資料掛載到宿主機的/var/data/elk上,以防容器重啟後資料的丟失;並且將logstash的配置檔案掛載到宿主機的/usr/config/logstash目錄。

--name的意思是給容器命名,命名是為了之後操作容器更加方便。

如果你之前搭建過ElasticSearch的話,會發現搭建的過程中有各種錯誤,但是使用docker搭建elk的過程中並沒有出現那些錯誤。

執行後檢視容器:

docker ps

檢視容器日誌:

docker logs -f elk

進入容器:

docker exec -it elk /bin/bash

修改配置後重啟容器:

docker restart elk

檢視kinaba

瀏覽器輸入http://my_host:5601/
即可看到kinaba介面。此時ElasticSearch中還沒有資料,需要安裝Filebeat採集資料到elk中。

Filebeat搭建

Filebeat用於採集資料並上報到Logstash或者ElasticSearch,在需要採集日誌的伺服器上下載Filebeat並解壓即可使用

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.1-linux-x86_64.tar.gz

tar -zxvf filebeat-6.2.1-linux-x86_64.tar.gz

修改配置檔案

進入filebeat,修改filebeat.yml。

filebeat.prospectors:
- type: log
  #需要設定為true配置才能生效
  enabled: true
  path:
    #配置需要採集的日誌路徑
    - /var/log/*.log
  #可以打一個tag以後分類使用
  tag: ["my_tag"]
  #對應ElasticSearch的type
  document_type: my_type
setup.kibana:
  #此處為kibana的ip及埠,即kibana:5601
  host: ""
output.logstash:
  #此處為logstash的ip及埠,即logstash:5044
  host: [""]
  #需要設定為true,否則不生效
  enabled: true
#如果想直接從Filebeat採集資料到ElasticSearch,則可以配置output.elasticsearch的相關配置

執行Filebeat

執行:

./filebeat -e -c filebeat.yml -d "publish"

此時可以看到Filebeat會將配置的path下的log傳送到Logstash;然後在elk中,Logstash處理完資料之後就會發送到ElasticSearch。但我們想做的是通過elk進行資料分析,因此匯入到ElasticSearch的資料必須是JSON格式的。

這是之前我的單條日誌的格式:

 2019-10-22 10:44:03.441 INFO  rmjk.interceptors.IPInterceptor Line:248 - {"clientType":"1","deCode":"0fbd93a286533d071","eaType":2,"eaid":191970823383420928,"ip":"xx.xx.xx.xx","model":"HONOR STF-AL10","osType":"9","path":"/applicationEnter","result":5,"session":"ef0a5c4bca424194b29e2ff31632ee5c","timestamp":1571712242326,"uid":"130605789659402240","v":"2.2.4"}

匯入之後不好分析,之後又想到使用Logstash的filter中的grok來處理日誌使之變成JSON格式之後再匯入到ElasticSearch中,但是由於我的日誌中的引數是不固定的,發現難度太大了,於是轉而使用Logback,將日誌直接格式化成JSON之後,再由Filebeat傳送。

Logback配置

我的專案是Spring Boot,在專案中加入依賴:

<dependency>
  <groupId>net.logstash.logback</groupId>
  <artifactId>logstash-logback-encoder</artifactId>
  <version>5.2</version>
</dependency>

然後在專案中的resource目錄下加入logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
       說明:
       1、日誌級別及檔案
           日誌記錄採用分級記錄,級別與日誌檔名相對應,不同級別的日誌資訊記錄到不同的日誌檔案中
           例如:error級別記錄到log_error_xxx.log或log_error.log(該檔案為當前記錄的日誌檔案),而log_error_xxx.log為歸檔日誌,
           日誌檔案按日期記錄,同一天內,若日誌檔案大小等於或大於2M,則按0、1、2...順序分別命名
           例如log-level-2013-12-21.0.log
           其它級別的日誌也是如此。
       2、檔案路徑
           若開發、測試用,在Eclipse中執行專案,則到Eclipse的安裝路徑查詢logs資料夾,以相對路徑../logs。
           若部署到Tomcat下,則在Tomcat下的logs檔案中
       3、Appender
           FILEERROR對應error級別,檔名以log-error-xxx.log形式命名
           FILEWARN對應warn級別,檔名以log-warn-xxx.log形式命名
           FILEINFO對應info級別,檔名以log-info-xxx.log形式命名
           FILEDEBUG對應debug級別,檔名以log-debug-xxx.log形式命名
           stdout將日誌資訊輸出到控制上,為方便開發測試使用
    -->
    <contextName>service</contextName>
    <property name="LOG_PATH" value="logs"/>
    <!--設定系統日誌目錄-->
    <property name="APPDIR" value="doctor"/>

    <!-- 日誌記錄器,日期滾動記錄 -->
    <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌檔案的路徑及檔名 -->
        <file>${LOG_PATH}/${APPDIR}/log_error.log</file>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 歸檔的日誌檔案的路徑,例如今天是2013-12-21日誌,當前寫的日誌檔案路徑為file節點指定,可以將此檔案與file指定檔案路徑設定為不同路徑,從而將當前日誌檔案或歸檔日誌檔案置不同的目錄。
            而2013-12-21的日誌檔案在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日誌記錄之外,還配置了日誌檔案不能超過2M,若超過2M,日誌檔案會以索引0開始,
            命名日誌檔案,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式記錄日誌 -->
        <append>true</append>
        <!-- 日誌檔案的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌檔案只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 日誌記錄器,日期滾動記錄 -->
    <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌檔案的路徑及檔名 -->
        <file>${LOG_PATH}/${APPDIR}/log_warn.log</file>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 歸檔的日誌檔案的路徑,例如今天是2013-12-21日誌,當前寫的日誌檔案路徑為file節點指定,可以將此檔案與file指定檔案路徑設定為不同路徑,從而將當前日誌檔案或歸檔日誌檔案置不同的目錄。
            而2013-12-21的日誌檔案在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日誌記錄之外,還配置了日誌檔案不能超過2M,若超過2M,日誌檔案會以索引0開始,
            命名日誌檔案,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式記錄日誌 -->
        <append>true</append>
        <!-- 日誌檔案的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌檔案只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 日誌記錄器,日期滾動記錄 -->
    <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌檔案的路徑及檔名 -->
        <file>${LOG_PATH}/${APPDIR}/log_info.log</file>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 歸檔的日誌檔案的路徑,例如今天是2013-12-21日誌,當前寫的日誌檔案路徑為file節點指定,可以將此檔案與file指定檔案路徑設定為不同路徑,從而將當前日誌檔案或歸檔日誌檔案置不同的目錄。
            而2013-12-21的日誌檔案在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日誌記錄之外,還配置了日誌檔案不能超過2M,若超過2M,日誌檔案會以索引0開始,
            命名日誌檔案,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式記錄日誌 -->
        <append>true</append>
        <!-- 日誌檔案的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌檔案只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="jsonLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌檔案的路徑及檔名 -->
        <file>${LOG_PATH}/${APPDIR}/log_IPInterceptor.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APPDIR}/log_IPInterceptor.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <jsonFactoryDecorator class="net.logstash.logback.decorate.CharacterEscapesJsonFactoryDecorator">
                <escape>
                    <targetCharacterCode>10</targetCharacterCode>
                    <escapeSequence>\u2028</escapeSequence>
                </escape>
            </jsonFactoryDecorator>
            <providers>
                <pattern>
                    <pattern>
                        {
                        "timestamp":"%date{ISO8601}",
                        "uid":"%mdc{uid}",
                        "requestIp":"%mdc{ip}",
                        "id":"%mdc{id}",
                        "clientType":"%mdc{clientType}",
                        "v":"%mdc{v}",
                        "deCode":"%mdc{deCode}",
                        "dataId":"%mdc{dataId}",
                        "dataType":"%mdc{dataType}",
                        "vid":"%mdc{vid}",
                        "did":"%mdc{did}",
                        "cid":"%mdc{cid}",
                        "tagId":"%mdc{tagId}"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>
    <!-- 彩色日誌 -->
    <!-- 彩色日誌依賴的渲染類 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- 彩色日誌格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--encoder 預設配置為PatternLayoutEncoder-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--此日誌appender是為開發使用,只配置最底級別,控制檯輸出的日誌級別是大於或等於此級別的日誌資訊-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
    </appender>

    <!-- 指定專案中某個包,當有日誌操作行為時的日誌記錄級別 -->
    <!-- rmjk.dao.mappe為根包,也就是隻要是發生在這個根包下面的所有日誌操作行為的許可權都是DEBUG -->
    <!-- 級別依次為【從高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->
    <logger name="rmjk.dao.mapper" level="DEBUG"/>
    <logger name="rmjk.service" level="DEBUG"/>
    <!--顯示日誌-->
    <logger name="org.springframework.jdbc.core" additivity="false" level="DEBUG">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILEINFO"/>
    </logger>
    <!-- 列印json日誌   -->
    <logger name="IPInterceptor" level="info" additivity="false">
        <appender-ref ref="jsonLog"/>
    </logger>

    <!-- 生產環境下,將此級別配置為適合的級別,以免日誌檔案太多或影響程式效能 -->
    <root level="INFO">
        <appender-ref ref="FILEERROR"/>
        <appender-ref ref="FILEWARN"/>
        <appender-ref ref="FILEINFO"/>

        <!-- 生產環境將請stdout,testfile去掉 -->
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

其中的關鍵為:

<logger name="IPInterceptor" level="info" additivity="false">
      <appender-ref ref="jsonLog"/>
</logger>

在需要列印的檔案中引入slf4j:

 private static final Logger LOG = LoggerFactory.getLogger("IPInterceptor");

MDC中放入需要列印的資訊:

MDC.put("ip", ipAddress);
MDC.put("path", servletPath);
MDC.put("uid", paramMap.get("uid") == null ? "" : paramMap.get("uid").toString());

此時如果使用了LOG.info("msg")的話,列印的內容會輸入到日誌的message中,日誌格式如下:

修改Logstash配置

修改/usr/config/logstash目錄下的beats-input.conf:

input {
  beats {
    port => 5044
    codec => "json"
  }
}

只加了一句codec => "json",但是Logstash會按照JSON格式來解析輸入的內容。

因為修改了配置,重啟elk:

docker restart elk

這樣,當我們的日誌生成完畢之後,使用Filebeat匯入到elk中,就可以通過Kibana來進行日誌分析了。
轉評贊就是最大的鼓勵

相關推薦

Docker安裝ELK實現JSON格式日誌分析

ELK是什麼 ELK是elastic公司提供的一套完整的日誌收集以及前端展示的解決方案,是三個產品的首字母縮寫,分別是ElasticSearch、Logstash和Kibana。 其中Logstash負責對日誌進行處理,如日誌的過濾、日誌的格式化等;ElasticSearch具有強大的文字搜尋能力,因此作為日

Docker安裝nginx實現負載均衡

一、安裝nginx 1.下載映象:docker pull nginx 2.成功啟動,但沒有掛載nginx.conf配置檔案     docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/logs:/www

Docker 安裝 MySQL 實現遠端連線

拉取映象 ``` docker pull mysql ``` 檢視拉取完成的映象 ``` docker images ``` 通過映象建立並啟動一個MySQL容器 ``` docker run --name mysql_dev -e MYSQL_ROOT_PASSWORD=123456 -p 3333:3

docker 安裝nginx掛載配置文件和www目錄以及日誌目錄

gin bsp 恢復 容器 名稱 內容 文件 etc dock ---恢復內容開始--- 一 首先 docker pull nginx 二 docker run --name myNginx -d -p 80:80 -v e:/docker/nginx/www

Win10系統使用Docker安裝oracle通過Navicat for oracle進行登錄

ted div index nvic avi 規則 切換頁面 start 進行   一、安裝Docker   Linux系統可以直接采用命令進行Docker安裝;   Win7系統安裝Dokcer實際通過Boot2Docker在Windows下安裝一個VirtualBox來

Ubuntu16.04下安裝redis實現helloworld

ber -a lang 配置 ges image download rep mon 原文出處:http://blog.csdn.net/xiangwanpeng 1 sudo wget http://download.redis.io/releases/redis-3.2.

PHP記錄和讀取JSON格式日誌文件

contents 日誌文件 轉換 ret abs 轉換成 情況 查找 $max 我們有時需要記錄用戶或者後端的某個操作事件的運行情況,可以使用後端語言如PHP將操作結果記錄到日誌文件中,方便測試和查找問題。尤其是這些在後端運行的而前端不能直接看到運行結果的,那麽就可以用日誌

快速安裝Tomcat 實現HTTPS訪問

SSL Tomcat HTTPS HTTPS,在HTTP下加了一層SSL,用於安全的HTTP數據傳輸,對於數據敏感的網址必須要使用HTTPS協議,本文將介紹如何快速安裝Tomcat,並實現HTTPS訪問。 安裝Tomcat 安裝tomcat必須得有java環境,所以先安裝JDK; 1、安裝JDK

Linux PXE遠程安裝服務 實現KIckstart無人值守安裝

網絡工作於Client/Server的網絡模式,支持工作站通過網絡從遠端服務器下載映像,並由此支持通過網絡啟動操作系統,在啟動過程中,終端要求服務器分配IP地址 實驗目標:部署PXE遠程安裝服務 、並實現KIckstart無人值守安裝 server_args = -s /var/lib

收集Nginx的json格式日誌(五)

IV htm inter .com success earch dom sys access 一.配置nginx [root@linux-node1 ~]# vim /etc/nginx/nginx.conf #修改日誌格式為json格式,並創建一個nginxweb的網站

Linux之Nginx原始碼編譯安裝實現Nginx版本升級,秒級切換和Nginx版本回滾,秒級回退

Linux之Nginx原始碼編譯安裝,並實現Nginx版本升級,秒級切換和Nginx版本回滾,秒級回退 1、先檢查Nginx依賴庫(主要4個gcc、pcre、zlib、openssl,通過yum安裝) 2、GCC——GNU編譯器集合(GCC可以使用預設包管理器的倉庫(reposito

編譯安裝nginx實現反向代理負載均衡和快取功能

一、編譯安裝nginx 1、下載 [[email protected] ~]# wget http://nginx.org/download/nginx-1.10.0.tar.gz 2、解壓 [[email protected] ~]#&

Docker】:docker安裝ELK(logstash,elasticsearch,kibana)

一:安裝logstash 1.拉取映象 docker pull logstash:5.6.11 2.建立目錄 mkdir /docker/logstash cd /docker/logstash 3.建立配置檔案 touch logstash.config 檔案內容: i

Docker系列】認識ELK,docker安裝ELK和IK分詞器

1.ELK簡介 ELK是三個開源軟體的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟體。新增了一個FileBeat,它是一個輕量級的日誌收集處理工具(Agent),Filebeat佔用資源少,適合於在各個伺服器上搜集日誌後傳輸給Logstash,官方也推

使用Docker安裝Jenkins新增外掛

Jenkins使用記錄 文章目錄 Jenkins使用記錄 建立專案 原始碼管理 構建觸發器 其它功能 額外配置 利用docker安裝Jenkins 拉取jenkins映象 docker

Docker安裝Zookeeper進行操作

拉去zookeeper映象 docker pull zookeeper 登入守護式容器並設定對映埠 docker run --privileged=true -id --name zookeeper --publish 33640:2181 -id zookeeper:latest

使用JDBC獲取資料庫資料,生成json格式檔案(省市區三級聯動)

前言: 轉眼已經2018年了, 17年有點忙,出差將近三個月,部落格也停更了好久。 一直都是不停的修復bug,和做一些業務需要的提示和互動。主要是因為和硬體有關係所以比較麻煩,開發週期也很長,而且還不穩定,硬體先行,然後在是除錯,互動。不過也有好處,學到的東西自然不是簡簡單單的 程式碼了。

python利用psutil模組獲取計算機系統資源json格式輸出

python3.6,windows下測試 一: 需要安裝psutil模組     easy_install.exe psutil 或者用下載psutil安裝包用pip install psutil命令安裝     psutil模組的資訊可參考: &nb

Linux下安裝Redis實現遠端連線,Redis Desktop Manager視覺化連線

1.下載redis redis不是安裝包,例如tomcat,mysql等都是安裝包直接解壓就可以使用,redis是原始檔,需要用編譯後才可以使用。 2.使用xftp把壓縮包拖入到root/redis/資料夾下,並解壓 tar -zxvf redis-5.0.0.

docker 安裝 mysql 掛載目錄

歡迎轉載: 轉載請註明出處 開篇先講點廢話:            最近忽然發現用來開發的電腦硬碟的剩餘空間越來越小.沒辦法.只能刪除一部分東西.但是突然發現很多東西其實都是自己想要留下的.糾結不已;所以準備把自己的m